【问题标题】:Lambda multiple conditions to validate list in list of object?Lambda 多个条件来验证对象列表中的列表?
【发布时间】:2013-02-21 14:08:39
【问题描述】:

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

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))

如果整个列表包含“abcandxyz”,我该如何验证?

【问题讨论】:

    标签: c# linq c#-4.0


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      如果我错了,请纠正我,但我相信您的初衷是针对您的 lst 变量进行验证,而不是 strlst。如果是针对strlist,那么我相信@LosManos 的回答是一个非常好的方法。如果您尝试使用 strlst 中的值验证 List&lt;person&gt; lst,那么您应该执行以下操作:

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

      即使您需要比较两个以上的东西,这种方式也可以确保您可以正确地进行操作。

      【讨论】:

      • 请注意,这是一个相当低效的操作,因为您正在为要搜索的每个字符串对所有人执行线性搜索,因此它不适用于大型数据集。对于小数据集就可以了。
      • 你能建议任何其他方法吗?
      • @Pravin 当然,看看我的回答。
      猜你喜欢
      • 2011-06-26
      • 2020-09-23
      • 1970-01-01
      • 2018-08-28
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      • 2023-04-04
      相关资源
      最近更新 更多