1

我想用下面的例子来解释我的问题。

我创建了一个列表,其中包含诸如 StudEmail、FirstName、LastName、Age、EligibilityMode 之类的字段

现在,我有一个如下的字符串数组列表来验证所有允许值的 EligibilityMode 列。

List<string> EligModes = new List<string> { "WithCertificate", "With Certificate", "WithoutCertificate","Without Certificate" };

如何从我的主列表中获取行列表,其中 EligibilityMode 在 EligModes 字符串数组列表中没有匹配的值。

我尝试使用 Contains()、existvalue() 和 Any() 执行此操作,但找不到解决方案。

MainList.Where(c => (c.EligibilityMode.existvalue(EligModes))).ToList();

对此有什么帮助吗?

编辑:

我在下面尝试过:

DataTable dt1 = new DataTable();
dt1 = ds.Tables[0];
List<object> lst = dt1.AsEnumerable().ToList<object>();

lst = lst.Where(c => !EligModes.Contains(c.EligibilityMode)).ToList();

但它没有识别 c.EligibilityMode 中的列。

另外,我试过,

DataTable dt1 = new DataTable();
dt1 = ds.Tables[0];
List<object> lst = dt1.AsEnumerable().ToList<object>();

result = from m in lst
     where !EligModes.Any(val => lst.EligibilityMode.Contains(val))
     select m;

这里的 lst.EligibilityMode 也有同样的问题。

请确认我从数据表创建列表是正确的。

4

3 回答 3

1

这给出了主列表中未在 EligModes 列表中列出的 EligibilityMode 值的项目:

MainList.Where(c => !EligModes.Contains(c.EligibilityMode)).ToList();

更新:因此MainList是数据行列表,转换为对象,您无法访问数据行的任何属性(实际上EligibilityMode属性甚至不存在这里)。这是正确的 DataTable 处理:

var rows = from r in ds.Tables[0].AsEnumerable()
           where !EligModes.Contains(r.Field<string>("EligibilityMode"))
           select r;

或者使用方法语法:

var rows = ds.Tables[0].AsEnumerable()
             .Where(r => !EligModes.Contains(r.Field<string>("EligibilityMode"));

您应该学习Linq to DataSet 查询的基础知识

于 2013-10-03T07:22:27.047 回答
0

也试试这个(虽然没有检查):

result = from m in MainList
           where !EligModes.Any(val => MainList.EligibilityMode.Contains(val))
           select m;
于 2013-10-03T07:28:52.973 回答
0

它可能会起作用。MainList.Where(c => EligModes.Contains(c.EligibilityMode)).ToList();

于 2013-10-03T07:31:48.503 回答