繁体   English   中英

根据对象c#的另一个列表搜索对象列表

[英]Search list of object based on another list of object c#

我有这个课:

   class Ean
   {
        public string Code{ get; set; }
   }

   class Article
   {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<Ean> BarCode { get; set; }
   }


   List<Article> arts = new List<Article>();
   List<Ean> eans = new List<Ean>();

我有两个对象的列表。 我需要检查列表“ arts.BarCode”中是否有eans列表中的代码之一。 如何使该搜索返回布尔值? 任何帮助将是巨大的! 谢谢!

像这样的东西将是完美的:

bool hasCheese = arts.Any(a => a.Name == "Cheese");

好吧,您可以使用:

bool hasCode = arts.Any(a => a.BarCode.Intersect(eans).Any());

这是假设, 要么你要正确对待每个Ean单独的对象, 或者你实际上已经覆盖EqualsGetHashCode适当。

创建一个集合会更有效:

var set = new HashSet<Ean>(eans);
bool hasCode = arts.Any(a => a.BarCode.Any(e => set.Contains(e)));

作为一种替代方法,您可以将列表展平为基本上是条形码的序列:

bool hasCode = arts.SelectMany(a => a.BarCode)
                   .Intersect(eans)
                   .Any();

实际上,这可能是最干净的方法,因为您不必担心篇文章具有匹配的条形码。

arts.SelectMany(a => a.BarCode).Intersect(eans).Any()

如果我正确理解您的问题,则应该是一种有效的方法。

arts.SelectMany(a => a.BarCode)

将所有BarCode集合展平为Enumerable<Ean> ,然后您可以将其与其他集合相交并查看是否剩余任何东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM