我有这样的数据列表:
Prod1: Id=1, Name="Book", Active=true
Prod2: Id=2, Name="Book", Active=false
Prod3: Id=3, Name="Book", Active=true
Prod4: Id=4, Name="Laptop", Active=true
Prod5: Id=5, Name="Laptop", Active=true
Prod6: Id=6, Name="Laptop", Active=true
Run Code Online (Sandbox Code Playgroud)
我想要执行的是获得这样的简化列表:
Prod1: Id=4, Name="Laptop", Active=true
Run Code Online (Sandbox Code Playgroud)
我想要做的是我需要按名称选择所有产品组,并返回所有真实的产品.由于Book有一个假,它不应该返回Book.
我试过这个:
lstProducts = lstProducts
.Where(x =>
lstProducts
.All(c => c.Name == x.Name && c.Active == true))
.GroupBy(c => c.Name).Select(c => c.First())
.ToList();
Run Code Online (Sandbox Code Playgroud)
但它的归零结果.如果我这样做where clause where Active == true,它会得到一个Book产品,因为它的所有Active都应该是真的才能得到它.
你要找的是首先按照它们对所有项目进行分组Name,然后仅筛选那些包含所有true项目Active并最后检索每个组的第一个项目的项目:
var result = lstProducts.GroupBy(item => item.Name)
.Where(group => group.All(item => item.Active)
.Select(group => group.First());
Run Code Online (Sandbox Code Playgroud)
如果您想确保该组的某些排序,如您的示例所示:
var result = lstProducts.GroupBy(item => item.Name)
.Where(group => group.All(item => item.Active)
.Select(group => group.OrderBy(item => item.Id).First());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3000 次 |
| 最近记录: |