我有这堂课:
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”列表中的一个代码。如何使此搜索返回布尔值? 任何帮助都会很棒!谢谢!
这样的事情会很完美:
bool hasCheese = arts.Any(a => a.Name == "Cheese");
答案 0 :(得分:3)
嗯,你可以使用:
bool hasCode = arts.Any(a => a.BarCode.Intersect(eans).Any());
假设要么你要单独处理每个Ean
对象,或你实际上已经覆盖Equals
和{{1}适当的。
创建一个集合会更有效:
GetHashCode
作为替代方法,您可以将列表展平为基本上是一系列条形码:
var set = new HashSet<Ean>(eans);
bool hasCode = arts.Any(a => a.BarCode.Any(e => set.Contains(e)));
这实际上可能是最干净的方法,因为您不关心哪个文章具有匹配的条形码。
答案 1 :(得分:2)
arts.SelectMany(a => a.BarCode).Intersect(eans).Any()
如果我正确理解你的问题,应该是一种有效的方法。
arts.SelectMany(a => a.BarCode)
将所有BarCode集合展平为Enumerable<Ean>
,然后您可以将其与其他集合相交并查看是否有任何内容。