如何使用linq查询在一列中基于多个值搜索选择记录。 如产品ID是" product1"," product2"," product3"我们有多少值
答案 0 :(得分:1)
您可以使用.Contains方法检查值是否在列表中。
var values = new List<string>() { "Prod1", "Prod2", "Prod3" };
var query = context.Set<Product>().Where(x => values.Contains(x.Name));
答案 1 :(得分:0)
您可以使用类似的东西(这是VB.Net,必要时更改为C#)
Dim result = products.Where(Function(p) p.ID = "product1" Or p.ID = "product2" Or p.ID = "product3", ...)
或者,您可以将其全部拉回客户端并使用.Contains
,如下所示:
Dim materializedProducts = products.ToList()
Dim result = materializedProducts.Where(Function(p) {"product1", "product2", "{product3}", ...}.Contains(p.ID))
更进一步,你可以创建一个名为IsIn或类似的扩展方法(泛型,如果它漂浮你的船),它允许你交换集合的顺序和搜索值:
<Extension()>
Public Function IsIn(Of T)(ByVal searchValue As T,
ByVal searchSet As IEnumerable(Of T))
Return searchset.Contains(searchValue)
End Sub
Dim materializedProducts = products.ToList()
Dim result = materializedProducts.Where(Function(p) p.ID.IsIn({"product1", "product2", "{product3}", ...}))