LINQ To Entities如何实现查询 select * from tableA where id in (1,2,3,4) ?

本文探讨了在使用LINQ进行查询时遇到的一个常见问题——如何在LINQ to Entities中使用Contains方法,并提供了一种通过字符串扩展方法来实现的有效解决方案。

熟悉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

 

转载于:https://www.cnblogs.com/chriskwok/archive/2010/04/03/LINQ.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值