从 LINQ to SQL 生成的 T-SQL 缺少 where 子句

2024-03-08

我有一个名为“CodeLookupAccessDataContext”的 DataContext 对象,它是通过 Visual Studio LINQ to SQL 类向导生成的。我扩展了该对象的功能,使其公开一些方法来返回 LINQ to SQL 查询的结果。以下是我定义的方法:

public List<CompositeSIDMap> lookupCompositeSIDMap(int regionId, int marketId)
{
    var sidGroupId = CompositeSIDGroupMaps.Where(x => x.RegionID.Equals(regionId) && x.MarketID.Equals(marketId))
        .Select(x => x.CompositeSIDGroup);

    IEnumerator<int> sidGroupIdEnum = sidGroupId.GetEnumerator();

    if (sidGroupIdEnum.MoveNext())
        return lookupCodeInfo<CompositeSIDMap, CompositeSIDMap>(x => x.CompositeSIDGroup.Equals(sidGroupIdEnum.Current), x => x);
    else
        return null;
}

private List<TResult> lookupCodeInfo<T, TResult>(Func<T, bool> compLambda, Func<T, TResult> selectLambda)
    where T : class
{
    System.Data.Linq.Table<T> dataTable = this.GetTable<T>();

    var codeQueryResult = dataTable.Where(compLambda)
        .Select(selectLambda);

    List<TResult> codeList = new List<TResult>();
    foreach (TResult row in codeQueryResult)
        codeList.Add(row);

    return codeList;
}

CompositeSIDGroupMap 和 CompositeSIDMap 都是我们数据库中的表,在我的 DataContext 对象中表示为对象。我编写了以下代码来调用这些方法并显示调用这些方法后生成的T-SQL:

using (CodeLookupAccessDataContext codeLookup = new CodeLookupAccessDataContext())
{
    codeLookup.Log = Console.Out;
    List<CompositeSIDMap> compList = codeLookup.lookupCompositeSIDMap(regionId, marketId);
}

调用此代码后,我在日志中得到以下结果:

SELECT [t0].[CompositeSIDGroup]
FROM [dbo].[CompositeSIDGroupMap] AS [t0]
WHERE ([t0].[RegionID] = @p0) AND ([t0].[MarketID] = @p1)
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [5]
-- @p1: Input Int (Size = 0; Prec = 0; Scale = 0) [3]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.1

SELECT [t0].[PK_CSM], [t0].[CompositeSIDGroup], [t0].[InputSID], [t0].[TargetSID], [t0].[StartOffset], [t0].[EndOffset], [t0].[Scale]
FROM [dbo].[CompositeSIDMap] AS [t0]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.1

第一个 T-SQL 语句包含指定的 where 子句并按预期返回一列。但是,第二个语句缺少 where 子句并返回所有列,即使我确实指定了要查看的行以及感兴趣的列。为什么第二个T-SQL语句是这样生成的?我应该如何确保通过T-SQL按照规范过滤出数据?

另请注意,我更愿意保留lookupCodeInfo(),并且特别有兴趣保持它能够接受 lambda 函数来指定要返回的行/列。

UPDATE

这次讨论 https://stackoverflow.com/questions/2783767/linq-based-generic-alternate-to-predicatet可能也会感兴趣。


问题是这个函数

private List<TResult> lookupCodeInfo<T, TResult>(Func<T, bool> compLambda, 
                                                 Func<T, TResult> selectLambda)

accepts Func<...>参数,这将使 lambda 编译成函数。 Linq-to-sql SQL 生成器无法将已编译的函数转换为 SQL,而是会在内存中执行过滤和投影。

改变你的lookupCodeInfo采取Expression<...>相反,这会将它们保留为 linq-to-sql 可以遍历的表达式树。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 LINQ to SQL 生成的 T-SQL 缺少 where 子句 的相关文章

  • 我如何理解这个 C 类型声明?

    double bar int double double double double 在查看讲座幻灯片时 我发现了留给学生的练习 用简单的英语来说 什么是类型bar在这个 C 声明中 Please帮助我解决这个问题 我什至不知道从哪里开始
  • FileStream 构造函数和默认缓冲区大小

    我们有一个使用 NET 4 用 C 编写的日志记录类 我想添加一个构造函数参数 该参数可以选择设置文件选项 WriteThrough http msdn microsoft com en us library system io fileo
  • 在 Xamarin 中隐藏软键盘

    如何隐藏软键盘以便在聚焦时显示Entry在 Xamarin forms 便携式表单项目中 我假设我们必须为此编写特定于平台的渲染器 但以下内容不起作用 我创建自己的条目子类 public class MyExtendedEntry Entr
  • 读取 C# 中的默认应用程序设置

    我的自定义网格控件有许多应用程序设置 在用户范围内 其中大部分是颜色设置 我有一个表单 用户可以在其中自定义这些颜色 并且我想添加一个用于恢复默认颜色设置的按钮 如何读取默认设置 例如 我有一个名为的用户设置CellBackgroundCo
  • 如何在.NET中使用java.util.zip.Deflater解压缩放气流?

    之后我有一个转储java util zip Deflater 可以确认它是有效的 因为 Java 的Inflater打开它很好 并且需要在 NET中打开它 byte content ReadSample sampleName var inp
  • 防止 boost::asio::io_context 在空轮询调用时停止

    此代码调用发布的句柄 boost asio io context ioc boost asio post ioc std cout lt lt lol lt lt std endl ioc poll 而这并没有 boost asio io
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • ASP.Net Core 内容配置附件/内联

    我正在从 WebAPI 控制器返回一个文件 Content Disposition 标头值自动设置为 附件 例如 处置 附件 文件名 30956 pdf 文件名 UTF 8 30956 pdf 当它设置为附件时 浏览器将要求保存文件而不是打
  • 动态生成的控件 ID 返回为 NULL

    我可以在 Page PreInit 函数中创建动态控件 如何检索控件及其 ID 我的 C 代码用于创建动态控件之一 var btn new WebForms Button btn Text btn ID Addmore btn Click
  • vs2008 c#:Facebook.rest.api如何使用它来获取好友列表?

    如何在此基础上取得进一步的进步 获取好友列表的下一步是什么 string APIKey ConfigurationManager AppSettings API Key string APISecret ConfigurationManag
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • 为什么 set_symmetry_difference 无法与比较器一起使用?

    Example program include
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • 将标量添加到特征矩阵(向量)

    我刚刚开始使用 Eigen 库 无法理解如何向所有矩阵成员添加标量值 假设我有一个矩阵 Eigen Matrix3Xf mtx Eigen Matrix3Xf Ones 3 4 mtx mtx 1 main cxx 104 13 error
  • cout 和字符串连接

    我刚刚复习了我的 C 我尝试这样做 include
  • 了解使用 Windows 本机 WPF 客户端进行 ADFS 登录

    我已经阅读了大量有关 ADFS 与 NodeJS Angular 或其他前端 Web 框架集成以及一般流程如何工作的文献 并通过 Auth0 Angular 起始代码构建了概念证明 但我不明白如何这可以与本机 WPF Windows 应用程
  • 跨多个域的 ASP.NET 会话

    是否有合适的 NET 解决方案来在多个域上提供持久服务器会话 即 如果该网站的用户在 www site1 com 下登录 他们也将在 www site2 com 下登录 安全是我们正在开发的程序的一个问题 Thanks 它是否需要在会话中
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • 更改 Windows Phone 系统托盘颜色

    有没有办法将 Windows Phone 上的系统托盘颜色从黑色更改为白色 我的应用程序有白色背景 所以我希望系统托盘也是白色的 您可以在页面 XAML 中执行此操作
  • 如何在 DropDownList 中保留空格 - ASP.net MVC Razor 视图

    我在视图中通过以下方式绑定我的模型 问题是我的项目文本是格式化文本 单词之间有空格 如下所示 123 First 234 00 123 AnotherItem 234 00 123 Second 234 00 我想保留此项目文本中的空格 即

随机推荐

  • 摆脱一生的限制?

    我正在尝试编写一个 Rust 函数 它将输入从一个生命周期约束转换为具有全局生命周期约束的相同类型的输出 概念上类似于unsafe fn foo lt a T1 T2 gt x T1 gt T2 where T1 a T2 T1 stati
  • 黄瓜报告缺少报告结果 - 报告未成功完成

    我使用 Cucumber Reports 插件在管道作业中获取 Cucumber 报告 以前工作正常 但现在出现此错误 CucumberReport Preparing Cucumber Reports CucumberReport JSO
  • 闪亮:无法在闪亮数据表中设置列宽

    我对 Shiny 和 DataTables 还很陌生 所以这可能是一个愚蠢的问题 由于某种原因我无法更改列宽 我试过 output table lt DT renderDataTable withProgress message Compi
  • 在 SQL Server 中,如何将 ROW_Number() 与子查询列一起使用?

    这是我的查询 DECLARE StartRow INT DECLARE PageSize INT SET StartRow 1 SET PageSize 5 SELECT ContractID Property FROM SELECT c
  • Notepad++ 可以配置为识别编译器错误消息并跳转到相应的位置吗?

    我正在一台没有 IDE 但使用 Notepad 的机器上构建一些相当大的代码 编译结果被重定向到一个文件 有时会有错误消息 满足定义良好的正则表达式 我想知道 NPP 是否有一个插件 它可以解析日志文件 识别错误 警告消息 并让我在相应的错
  • 如何使 require() 采取文件的直接路径

    所以我有以下代码 问题是当我循环遍历数组中的每个文件并尝试要求文件路径时 它给我一个找不到模块的错误 local Commands function getCommands local readdir fs readdir local re
  • kubectl:来自服务器的错误:当前没有打开 SSH 隧道

    我正在 Google Container Engine 上运行一些容器 有一天一切都很好 第二天就不行了attach不再到我的容器了 或者exec 或任何其他 docker 命令 我删除了 Pod 并让新的 Pod 实例化 但没有帮助 然后
  • JavaScript 中自定义类似数组的 getter

    我有一个简单的 ES6 类 如下所示 class Ring extends Array insert item index this splice index 0 item return this 我想让 Ring 对象的索引换行 这样ne
  • 为什么 F# 编译器对一种情况给出错误,而对另一种情况则不给出错误?

    我正在处理来自 F 的平台调用 并且收到一个编译器错误 我真的无法理解 首先 让我展示一下我正在做的事情的 C 签名 int Foo ULONG PTR phHandle DWORD flags 在 F 中 我认为本地调用它的正确方法如下
  • 如何使 fitBounds 感知自定义控件

    我的谷歌地图左侧有一个大型 300 500px 自定义控件 我将我的标记聚集在一起 当用户单击标记时 我想放大地图以显示该群集中的标记 问题是 当我得到标记集合的边界时 然后map fitBounds collection bounds 我
  • 如何在 Rake 任务中执行命令?

    我的 Rails 应用程序中有 rake 任务 我想在 rake 任务中运行命令行命令 我怎样才能做到这一点 我尝试了以下方法但失败了 desc Sending the newsletter to all the users task se
  • 如何从框架中获取用户输入并保存到txt文件中?

    我的程序运行如下 我有一个带有添加按钮 保存按钮和选项卡控件的表单 当单击表单中的添加按钮时 选项卡控件将添加更多选项卡项目 tabitem 基本上是从 myframe 添加的 其中包括用户在 TEdit 中键入的值 我想要实现的是当我点击
  • 如何在 RxJava 中延迟地从列表中发出项目?

    我正在使用 Retrofit 从 REST API 获取书签 public interface BookmarkService GET bookmarks Observable
  • UiWebView 委托方法未被调用

    我正在尝试在 webView 中播放 youtube 嵌入视频 当我未设置委托时它会播放 并且如果我设置委托视频不会加载 并且委托方法也不会被调用 这是我的代码 m class import EmbeddedVideoVC h interf
  • 数组之间的交集索引

    是否有一种快速方法可以将数组的每个元素与唯一标识符列表中的每个元素进行比较 使用 for 循环来遍历每个唯一值是可行的 但速度太慢而无法使用 我一直在寻找矢量化解决方案 但没有成功 任何帮助将不胜感激 arrStart startRavel
  • http 错误 403.14-禁止

    我成功地将我的测试 html 页面托管在iis8 当我尝试托管已经创建的网站时 我得到了http错误 403 14 禁止 即使我将默认文档设置为具有框架的起始 html 页面 该网站有几个文件夹内部文件夹 当我启用目录浏览时 它将列出该页面
  • Process.start() 启动的进程返回错误的进程 ID?

    我正在使用以下代码启动可执行文件 Process proc new Process proc StartInfo FileName executablePath proc Start proc WaitForInputIdle 在这次通话之
  • 使用 Process、RegistryKey 将 .NET Framework 代码移植到 .NET Standard

    我有一个来自现有 NET Framework 项目的方法 该方法从注册表获取 Windows 中默认浏览器的路径 并使用Process call string browser RegistryKey regKey null try regK
  • 请参阅调试目的的 Firebase 网络流量

    我希望能够使用 Charles Proxy 调试 firebase 分析 我无权访问源代码 因此无法在 Firebase 中启用调试视图 我想要跟踪网络流量 以便能够使用 Firebase Analytics 数据的 Charles 代理查
  • 从 LINQ to SQL 生成的 T-SQL 缺少 where 子句

    我有一个名为 CodeLookupAccessDataContext 的 DataContext 对象 它是通过 Visual Studio LINQ to SQL 类向导生成的 我扩展了该对象的功能 使其公开一些方法来返回 LINQ to