C# 查询datatable字段包含列表中任何项的行<;字符串>;
我是LINQ的新手。C# 查询datatable字段包含列表中任何项的行<;字符串>;,c#,linq,C#,Linq,我是LINQ的新手。 我想查询描述列字符串(示例值“我今天感觉很幸运”)包含/匹配列表lst中任何项目的所有行 示例列表项包含{“lucky”、“bad”、“ok”}。 我只想通过使用linq实现,但我很困惑下面的方法是否正确?? 谢谢 选项1: var项目= 来自datatbl.AsEnumerable()中的 来自lst中的b 其中a.字段(“说明”)包含(b) 选择一个 选项2: var项目= 来自datatbl.AsEnumerable()中的 其中lst.Any(x=>a.Field(
我想查询描述列字符串(示例值“我今天感觉很幸运”)包含/匹配
列表lst
中任何项目的所有行示例列表项包含{“lucky”、“bad”、“ok”}。
我只想通过使用linq实现,但我很困惑下面的方法是否正确??
谢谢 选项1:
var项目=
来自datatbl.AsEnumerable()中的
来自lst中的b
其中a.字段(“说明”)包含(b)
选择一个代码>
选项2:
var项目=
来自datatbl.AsEnumerable()中的
其中lst.Any(x=>a.Field(“description”).包含(x))
选择一个代码>这两个选项都应该有效(将contains更改为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<string> lst = new List<string>(new string[] { "Lucky", "bad", "ok" });
var item =
from a in datatbl.AsEnumerable()
from b in lst
where a.Field<string>("description").ToUpper().Contains(b.ToUpper())
select a;
var item2 =
from a in datatbl.AsEnumerable()
where lst.Any(x => a.Field<string>("description").ToUpper().Contains(x.ToUpper()))
select a;
DataTable datatbl=newdatatable();
Add(新的DataColumn(“description”,typeof(string));
//添加简单的测试行
添加(“我今天感觉很幸运。”);
添加(“我今天感觉不好。”);
添加(“我今天感觉很好。”);
//这里有更多的测试行。。。
List lst=新列表(新字符串[]{“Lucky”、“bad”、“ok”});
变量项=
从datatbl.AsEnumerable()中的
来自lst中的b
其中a.Field(“description”).ToUpper()包含(b.ToUpper())
选择一个;
变量项2=
从datatbl.AsEnumerable()中的
其中lst.Any(x=>a.Field(“description”).ToUpper()包含(x.ToUpper())
选择一个;
发现如果一行值为我今天感觉不幸运、不好或不好。
下面是Linq:
List<string> lst = new List<string>(new string[] { "Lucky", "bad", "ok" });
var item = from a in datatbl.AsEnumerable()
from b in lst
where a.Field<string>("description").ToUpper().Contains(b.ToUpper())
select a;
List lst=新列表(新字符串[]{“Lucky”、“bad”、“ok”});
var item=来自datatbl.AsEnumerable()中的
来自lst中的b
其中a.Field(“description”).ToUpper()包含(b.ToUpper())
选择一个;
结果将返回同一行的3个重复记录,默认情况下似乎不明显。这是上林克的情况吗
要获得不同的行,我需要修改为:
List<string> lst = new List<string>(new string[] { "Lucky", "bad", "ok" });
var item = (from a in datatbl.AsEnumerable()
from b in lst
where a.Field<string>("description").ToUpper().Contains(b.ToUpper())
select a).Distinct();
List lst=新列表(新字符串[]{“Lucky”、“bad”、“ok”});
var item=(来自datatbl.AsEnumerable()中的a)
来自lst中的b
其中a.Field(“description”).ToUpper()包含(b.ToUpper())
选择a).Distinct();
+1-我意识到我是如何误读了这个问题:)除了您的解决方案之外,您还可以使用以下where子句,这样就不需要对字符串执行大写转换:where string.Compare(a.Field(“description”)、b、StringComparison.OrdinalIgnoreCase)==0
Les,Fredrik,谢谢您的回复。它非常有用,这正是我想要的当我回到我的工作岗位时,我要试穿一下。