我有一个类,OrderInfo如下所示,
class OrderInfo
{
string Product
boolean NoIssues
}
我有一个OrderInfo列表。我想做的是知道每个产品是否存在问题。以下是我的清单示例。
ProductList
Product NoIssues
ABC true
ABC true
ABC false
ABC true
EFG true
EFG true
EFG true
EFG true
EFG true
以下是我想要的结果。
Result
ABC false
EFG true
因此,我将使用LINQ按产品分组以获取唯一的产品列表,然后循环浏览此列表以运行选择查询,其中我过滤NoIssues = false。但是不确定如何做到这一点或者这是最好的方法
var res = (from ord in ProductList
group ord by ord.Product).ToList()
所以我相信上面的代码会给我一个我可以循环的唯一产品列表。但是不确定如果我使用带有where条件且不返回任何内容的select语句会发生什么?
答案 0 :(得分:5)
您可以使用All: -
List<OrderInfo> result = list.GroupBy(x => x.Product)
.Select(x => new OrderInfo
{
Product = x.Key,
NoIssues = x.All(z => z.NoIssues)
}).ToList();
或者如果您更喜欢查询语法: -
List<OrderInfo> result = (from ord in ProductList
group ord by ord.Product into g
select new OrderInfo
{
Product = g.Key,
NoIssues = g.All(x => x.NoIssues)
}).ToList();
答案 1 :(得分:1)
如果您不想为此创建新的Product对象,我会选择:
var result = from product in ProductList
group product by product.Product into productGroup
select productGroup.Where(p => !p.NoIssues)
.DefaultIfEmpty(productGroup.First())
.First();
否则,@ Rahul Singh的答案更直观。