如何使用LINQ2SQL生成WHERE…IN子句?

如何使用LINQ2SQL生成WHERE…IN子句?,linq,linq-to-sql,Linq,Linq To Sql,从SQL向后到LINQ2SQL有时非常简单。以下声明 SELECT user FROM users WHERE lastname='jones' 相当容易翻译成 from u in users where u.lastname='jones' select u 但是如何生成以下SQL SELECT user FROM users WHERE lastname IN ('jones', 'anderson') 我必须做一些搜索才能找到这个,我认为它可能对其他人有用 List<strin

从SQL向后到LINQ2SQL有时非常简单。以下声明

SELECT user FROM users WHERE lastname='jones'
相当容易翻译成

from u in users where u.lastname='jones' select u
但是如何生成以下SQL

SELECT user FROM users WHERE lastname IN ('jones', 'anderson')

我必须做一些搜索才能找到这个,我认为它可能对其他人有用

List<string> names = new List<string>() { "jones", "anderson" };

from u in users where names.Contains(u.lastname) select u
List name=newlist(){“琼斯”,“安德森”};
从用户名称所在的u中。包含(u.lastname)选择u

Contains表达式不可翻译为SQL,因此如果用户是LinqToSql DataContext上的
System.Data.Linq.Table
,则该表达式将遇到问题。@klausbyskov:这不是真的。实体框架/LINQtoEntities在.NET3.5中无法做到这一点,但LINQtoSQL很乐意将其转换为SQL。唯一的问题是in()子句中的元素数(“name”列表中的元素数)是有限的,这是由于ADO.NET的限制。@klausbyskov:实际上它工作得很好-我已经在SQL profiler中运行了代码并查看了结果。你给了我否决票了吗?至少在LINQPad中,这不会生成In查询,而是生成一个KEY=VALUE1 | | KEY=VALUE2 | |。。。查询