Lambda多个条件来验证对象列表中的列表?

时间:2013-02-21 14:08:39

标签: c# linq c#-4.0

我有一个由以下项目组成的列表

List<person> lst = new List<person>()
lst.Add(new person(){ name="abc", age="24" });
lst.Add(new person(){ name="xyz", age="25" });
lst.Add(new person(){ name="zxc", age="28" });
lst.Add(new person(){ name="wer", age="38" });

List<string> strlst = new List<string>();
strlst.Add("abc");
strlst.Add("zxc");

现在我正在验证列表

lst.Exists(a => strlst.Contains(a.name))

如果整个列表包含'abc and xyz`,我该如何验证?

2 个答案:

答案 0 :(得分:2)

如果您找到两个名称中的Intersect,则会获得两个列表共有的名称。如果该交集与字符串列表的大小相同,则表示它们都在交集中,这意味着它们都在另一个列表中。

return list.Select(person => person.name)
       .Intersect(strlst).Count() == strlst.Count();

答案 1 :(得分:1)

如果我错了,请纠正我,但我相信您最初的意图是验证lst变量,而不是strlst。如果它是strlist,那么我相信@LosManos的答案是一个非常好的方法。如果您尝试使用List<person> lst中的值验证strlst,那么您应该执行以下操作:

var allNames = lst.Select(l => l.name);
var containsAll = strlist.All(s => allNames.Contains(s));

即使你需要比较两件以上的东西,这种方式也可以确保你能正确地做到这一点。