如何在Linq中编写此where
条件?
var result = from i in context.ItemsFullDetails where i.iditem in (1,2,3,4)
where
条件包含一个id列表,其中可与iditem
列进行比较。
如果我以上述方式写作,我会收到错误。
答案 0 :(得分:4)
试试这个:
/*Hold here the items you want to filter by*/
var filterCriteria = new List(){1,2,3,4};
/*Get results as Ienumerable<int>*/
var result = context.ItemsFullDetails.Where(i => filterCriteria.Contains(i.iditem));
如果您想以列表/数组的形式获取结果,可以使用result.ToList()
/ result.ToArray()
答案 1 :(得分:3)
尝试这种方法:
//create filter list
int[] productList = new int[] { 1, 2, 3, 4 };
// check your search item exists in the filter list
var myProducts = from p in db.Products
where productList.Contains(p.ProductID)
select p;
答案 2 :(得分:1)
你有几个选择。第一个,正如我看到很多人在这个和类似的帖子上建议的那样,是从LINQ查询创建一个外部集合,并使用Contains
来反对:
int[] items = new[] { 1, 2, 3, 4 };
var result = from i in context.ItemsFullDetails where items.Contains(i.iditem)
但是说,如果你的例子或多或少是你真正想做的事情而你确实有一套可能的,我会更想写出逻辑:
var result = from i in context.ItemsFullDetails where i.iditem == 1
|| i.iditem == 2
|| i.iditem == 3
|| i.iditem == 4
现在,这几乎一样漂亮。我同意。 但是这将是你做的事情最有效的方式,而且我认为它不够可读 - 特别是对于那些天生习惯于这样的逻辑的有经验的开发人员 - 保证缺乏效率。现在,显然,只有拥有编译时集合集时,此方法才有效。但是既然你在你的例子中做了,我假设你将在现实生活中。这就是我要做的。然后,您不必冒险为每个元素循环遍历整个集合。
或者,如果您需要一组动态条件:
List<int> items = new List<int>() { 1, 2, 3, 4 };
items.Add(...);;
var result = from i in context.ItemsFullDetails where items.Contains(i.iditem)