我有一种有趣的感觉,我错误地处理了这个问题。这是我正在尝试做的事情:
我有一个字符串列表 ( List<string>
),我想从表中返回所有行,其中该行中的特定字段与列表中的一个字符串匹配。如果我使用循环并为每个字符串执行一个 Linq 语句,这很简单。当然,我希望尽可能避免多次往返数据库。
你会在这里推荐什么样的策略?我很乐意将 LINQ 与 Entity Framework 一起使用,但我意识到我可能会受到这些特定技术的限制。
我正在使用实体框架 4。
我有一种有趣的感觉,我错误地处理了这个问题。这是我正在尝试做的事情:
我有一个字符串列表 ( List<string>
),我想从表中返回所有行,其中该行中的特定字段与列表中的一个字符串匹配。如果我使用循环并为每个字符串执行一个 Linq 语句,这很简单。当然,我希望尽可能避免多次往返数据库。
你会在这里推荐什么样的策略?我很乐意将 LINQ 与 Entity Framework 一起使用,但我意识到我可能会受到这些特定技术的限制。
我正在使用实体框架 4。
您可以使用List.Contains
:
List<string> yourList = ...;
var query = context.YourTable.Where(x => yourList.Contains(x.Foo));
多次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));
对于这种情况,我使用扩展方法
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"))