2012-11-22 33 views
13

我正在寻找建立以下Lambda表达式“IN”运算符是否存在?

IQueryable<Object> queryEntity = 
       _db.Projects.Where(Project=>Project.Id.IN(1,2,3,4)); 

的Lambda表达式像我不觉得在Lambda表达式任何IN操作。

有人有什么建议吗?

+2

参见['IEnumerable.Contains'](http://msdn.microsoft.com/en-us/library/ bb357185.aspx); EF对来自“本地采购”序列的允许类型有限制。整数很好。 – 2012-11-22 07:43:14

回答

17

为此使用IEnumerable.Contains

var idList = new[] { 1, 2, 3, 4 }; 
IQueryable<Object> queryEntity = 
       _db.Projects.Where(Project => idList.Contains(Project.Id)); 

你当然可以构建内联idList

+1

但请记住,如果这到了真正的大IDList(说8000 ID)它可能会失败。我认为这是为了超出批量或者......至少我是这样的。 –

+0

是的 - 适用于构建奇怪的LINQ查询并转换为慢SQL调用时可能出现的所有问题。但是这对你用IQueryable做的任何事情都是如此。 :) –

+2

如果'idList'真的很大,那么它很可能是作为数据库查询结果出现的,在这种情况下,您应该对该查询加入ON,对吧? –

2

没有在运营商,但有一个包含。只需翻转你的逻辑:

IQueryable<Object> queryEntity = _db.Projects.Where(Project=>(new []{1,2,3,4}).Contains(Project.Id));

+0

语法错误。 (1,2,3,4)意味着什么 – Tilak

0

你可以写你自己的

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); 
} 
+0

什么都不是,它与http://msdn.microsoft.com/en-us/library/bb352880.aspx – Tilak

+0

有什么不同,它被称为OP想要 – slawekwin

+0

这是不可用的在'IQueryable'上下文中,因为没有办法将它转换为SQL,服务器就会理解。 –