实体框架4声明中的多个“where”条件 - 可能吗?

时间:2012-07-06 19:28:38

标签: c# linq entity-framework

我有一种有趣的感觉,我错误地接近了这个问题。这就是我要做的事情:

我有一个字符串列表(List<string>),我想从表中返回所有行,其中该行中的特定字段与列表中的一个字符串匹配。如果我使用循环并为每个字符串执行一个Linq语句,这很简单。当然,我想避免尽可能多的往返数据库。

您会在此推荐什么样的策略?我很乐意将LINQ与Entity Framework一起使用,但我意识到我可能会受到这些特定技术的限制。

我正在使用实体框架4。

3 个答案:

答案 0 :(得分:3)

您可以使用List.Contains

List<string> yourList = ...;
var query = context.YourTable.Where(x => yourList.Contains(x.Foo));

答案 1 :(得分:2)

多个Where调用类似于AND操作。你想要的是一个OR:

col.Where(w=>w==1 || w==2 || w==3)

或者,映射SQL IN运算符的是Contains方法:

var vals=new[] {1,2,3};
var filteredcol=col.Where(w=>vals.Contains(w));

答案 2 :(得分:1)

对于这种情况,我使用扩展方法

public static bool In<T>(this T source, params T[] list)
{
   if (source = null)
       throw new NullReferenceException("Source is Null");

   return list.Contains(source);
}

并将其命名为

c.Where(w=> w.In("a", "g", "f"))