Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查询datatable字段包含列表中任何项的行<;字符串>;_C#_Linq - Fatal编程技术网

C# 查询datatable字段包含列表中任何项的行<;字符串>;

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(

我是LINQ的新手。
我想查询描述列字符串(示例值“我今天感觉很幸运”)包含/匹配
列表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,谢谢您的回复。它非常有用,这正是我想要的当我回到我的工作岗位时,我要试穿一下。