LINQ:如何使用多个动态输入值检查CONTAINS

时间:2012-04-30 10:59:51

标签: linq linq-to-sql

我遇到有关LINQ查询的问题。

我有多个输入值存储在List<字符串>变量

我必须形成一个LINQ查询,该查询将有一个where子句,用于检查带有CONTAINS关键字的相应列。我面临的问题是List<字符串>可以包含任意数量的值。

所以我想知道如何形成一个可以从集合对象中读取输入值的查询。并显示结果。

任何建议都将不胜感激。

提前致谢。

2 个答案:

答案 0 :(得分:2)

Linq扩展方法:

public static bool ContainsAny<T>(this IEnumerable<T> Collection, IEnumerable<T> Values)
{
     return Collection.Any(x=> Values.Contains(x));
}

然后你可以使用:

List<string> List1 = getStringList1();
List<string> List2 = getStringList2();

bool List2ItemsInList1 = List1.ContainsAny(List2);

答案 1 :(得分:0)

你的问题不明确。假设你有三个值X,Y和Z.如果你想获取一个列是X,Y或Z的结果,那么habib-osu的答案就是这样做。

如果您要查找特定列包含X,Y和Z的所有记录,则以下内容应该起作用

List<string> options = new List<string>();
options.Add("X");
options.Add("Y");
options.Add("Z");

var query = (from r in dc.Table select r); 
foreach(var option in options)
   query = (from r in query where r.Column.Contains(option) select r);

var list = query.ToList(); 

这将生成一个类似于以下

的SQL查询
select * from Table where Column like '%X%' and column like '%Y%' and column like '%Z%'