查询数据表字段包含列表中的任何项的行

我是LINQ的新手。
我想查询描述列字符串的所有行(示例值“我今天感觉很幸运。”)包含/匹配List lst中的任何项目。
列表项的示例包含{“lucky”,“bad”,“ok”}。
我想通过只使用linq来实现,但我混淆了以下方法正确吗?
谢谢。

选项1:
var item =
from a in datatbl.AsEnumerable()
from b in lst
where a.Field("description").contains(b)
select a;

选项2:
var item =
from a in datatbl.AsEnumerable()
where lst.Any(x=> a.Field("description").Contains(x))
select a;

您的两个选项都应该有效(更改包含到Contains)。 但是如果你想要不区分大小写,则需要使用ToUpper或其他东西。

例如,此代码提供“测试夹具”并处理不区分大小写。

  DataTable datatbl = new DataTable(); datatbl.Columns.Add(new DataColumn("description",typeof(string))); // add simple test rows datatbl.Rows.Add("I'm feeling lucky today."); datatbl.Rows.Add("I'm feeling bad today."); datatbl.Rows.Add("I'm feeling good today."); // more test rows here... List lst = new List(new string[] { "Lucky", "bad", "ok" }); var item = from a in datatbl.AsEnumerable() from b in lst where a.Field("description").ToUpper().Contains(b.ToUpper()) select a; var item2 = from a in datatbl.AsEnumerable() where lst.Any(x => a.Field("description").ToUpper().Contains(x.ToUpper())) select a; 

发现,如果一行值, I'm not feeling Lucky, bad or ok today. 与Linq下面:

 List lst = new List(new string[] { "Lucky", "bad", "ok" }); var item = from a in datatbl.AsEnumerable() from b in lst where a.Field("description").ToUpper().Contains(b.ToUpper()) select a; 

结果将返回3个同一行的重复记录 ,默认情况下看起来并不明显。 这是上面linq的情况?

要获得不同的行 ,我需要修改为:

 List lst = new List(new string[] { "Lucky", "bad", "ok" }); var item = (from a in datatbl.AsEnumerable() from b in lst where a.Field("description").ToUpper().Contains(b.ToUpper()) select a).Distinct();