我有一种有趣的感觉,我错误地接近了这个问题。这就是我要做的事情:
我有一个字符串列表(List<string>
),我想从表中返回所有行,其中该行中的特定字段与列表中的一个字符串匹配。如果我使用循环并为每个字符串执行一个Linq语句,这很简单。当然,我想避免尽可能多的往返数据库。
您会在此推荐什么样的策略?我很乐意将LINQ与Entity Framework一起使用,但我意识到我可能会受到这些特定技术的限制。
我正在使用实体框架4。
答案 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"))