Chr☆s Kwok 的技术笔记

.NET, C#, WPF, WCF, WF, .NetCore & LINQ ... I know how it works because I know why it works ...

博客园 首页 新随笔 订阅 管理
  130 随笔 :: 0 文章 :: 30 评论 :: 30万 阅读

熟悉LINQ的朋友也许会碰到标题的问题,且很自然地想起使用下面地语句实现:  

IList<int> ids = new List<int> { 2, 3, 4 };
var list
= context.TestTables.Where(a => ids.Contains(a.RID)).ToList();

然而,运行发现系统会抛出如下异常:  

LINQ to Entities 不识别方法“Boolean Contains(Int32)”,因此该方法无法转换为存储表达式。

 究其原因,是Contains是IList类型的扩展方法而linq无法转换过来。所以上述办法就无法得到我们想要的结果(虽然编译不会有错)。

 但可喜的是可以使用string类型的扩展方法Contains;当然这里需要在原表增加计算字段

[IDSearched] AS ((','+CONVERT([varchar](10),[RID],0))+',')

 

而获取数据的Linq查询语句就可以这样实现:

string ids = ",2,3,4,5,";
var list
= context.TestTables.Where(a => ids.Contains(a.IDSearched)).ToList();

 

上面语句运行时,LINQ To Entities会将其翻译为如下SQL语句:

复制代码
SELECT
[Extent1].[RID] AS [RID],
[Extent1].[NAME] AS [NAME],
[Extent1].[ROWDATE] AS [ROWDATE],
[Extent1].[DBSID] AS [DBSID],
[Extent1].[BIRTHDATE] AS [BIRTHDATE],
[Extent1].[NOTE] AS [NOTE]
FROM [dbo].[TestTable] AS [Extent1]
WHERE (CAST(CHARINDEX([Extent1].[NOTE], 'hhh,ggg') AS int)) > 0
复制代码

 

posted on   Chr☆s  阅读(5588)  评论(3编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示