如何在具有两个属性的对象列表中检查是否所有具有一个相同属性的对象也具有相同的其他属性?

时间:2014-07-26 18:46:24

标签: c# linq

我有一个Product s List<Product> productList的列表,其中:

public class Product
{
     int ProductId { get; set; }
     decimal Price { get; set; }
}

如何检查productList Product与[{1}}的所有ProductId是否也具有相同的Price

我发现这有效:

bool result = productCheckList.GroupBy(p => p.ProductId).Any(gr => 
                     gr.Distinct().ToList().Count > 1)`;

但我也想知道一个是不相似的,哪个不是。

所以,当我有一个像这样的列表时:

var list = new List<Product>
list.Add(new Product { ProductId = 1, Price = 2m }
list.Add(new Product { ProductId = 1, Price = 1m }

我希望方法返回false,并显示ProductId = 1.

1 个答案:

答案 0 :(得分:2)

这些群组包含产品,而不是产品的价格,因此您需要了解价格:

bool result =
  productCheckList.GroupBy(p => p.ProductId)
  .Any(gr => gr.Select(pr => pr.Price).Distinct().Count() > 1);

获取价格不同的产品组:

List<IGrouping<int, Product>> result =
  productCheckList.GroupBy(p => p.ProductId)
  .Where(gr => gr.Select(pr => pr.Price).Distinct().Count() > 1)
  .ToList();