3

我有一种有趣的感觉,我错误地处理了这个问题。这是我正在尝试做的事情:

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

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

我正在使用实体框架 4。

4

3 回答 3

4

您可以使用List.Contains

List<string> yourList = ...;
var query = context.YourTable.Where(x => yourList.Contains(x.Foo));
于 2012-07-06T19:30:46.277 回答
2

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

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

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

var vals=new[] {1,2,3};
var filteredcol=col.Where(w=>vals.Contains(w));
于 2012-07-06T19:32:07.127 回答
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"))
于 2012-07-06T19:40:47.343 回答