我正在寻找建立以下Lambda表达式“IN”运算符是否存在?
IQueryable<Object> queryEntity =
_db.Projects.Where(Project=>Project.Id.IN(1,2,3,4));
的Lambda表达式像我不觉得在Lambda表达式任何IN
操作。
有人有什么建议吗?
我正在寻找建立以下Lambda表达式“IN”运算符是否存在?
IQueryable<Object> queryEntity =
_db.Projects.Where(Project=>Project.Id.IN(1,2,3,4));
的Lambda表达式像我不觉得在Lambda表达式任何IN
操作。
有人有什么建议吗?
为此使用IEnumerable.Contains。
var idList = new[] { 1, 2, 3, 4 };
IQueryable<Object> queryEntity =
_db.Projects.Where(Project => idList.Contains(Project.Id));
你当然可以构建内联idList
。
但请记住,如果这到了真正的大IDList(说8000 ID)它可能会失败。我认为这是为了超出批量或者......至少我是这样的。 –
是的 - 适用于构建奇怪的LINQ查询并转换为慢SQL调用时可能出现的所有问题。但是这对你用IQueryable做的任何事情都是如此。 :) –
如果'idList'真的很大,那么它很可能是作为数据库查询结果出现的,在这种情况下,您应该对该查询加入ON,对吧? –
您正在寻找IEnumerable.Contains
_db.Projects.Where(Project => list.Contains(Project.Id));
没有在运营商,但有一个包含。只需翻转你的逻辑:
IQueryable<Object> queryEntity = _db.Projects.Where(Project=>(new []{1,2,3,4}).Contains(Project.Id));
语法错误。 (1,2,3,4)意味着什么 – Tilak
你可以写你自己的
public static bool In(this object item, IEnumerable list)
{
return list.Contains(item);
}
public static bool In(this object item, params object[] list)
{
return item.In(list);
}
参见['IEnumerable.Contains'](http://msdn.microsoft.com/en-us/library/ bb357185.aspx); EF对来自“本地采购”序列的允许类型有限制。整数很好。 – 2012-11-22 07:43:14