我想用下面的例子来解释我的问题。
我创建了一个列表,其中包含以下字段: StudEmail,FirstName,LastName,Age,EligibilityMode
现在, 我有一个String Array列表,如下所示,验证所有允许值的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相同的问题。
请确认我从数据表创建列表是正确的。
答案 0 :(得分:1)
这会从主列表中提供EligMode列表中未列出EligibilityMode值的项目:
MainList.Where(c => !EligModes.Contains(c.EligibilityMode)).ToList();
UPDATE:因此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"));
答案 1 :(得分:0)
尝试这一点(虽然没有检查过):
result = from m in MainList
where !EligModes.Any(val => MainList.EligibilityMode.Contains(val))
select m;
答案 2 :(得分:0)
它可能有用。 MainList.Where(c =&gt; EligModes.Contains(c.EligibilityMode))。ToList();