我在为一个流利的LINQ查询而挣扎。我有一个带有Contributor数组的Product对象:
public class Product
{
public int Id {get;set;}
public string Role {get;set;}
public string Publisher {get;set;}
}
public class Contributor
{
public string Id {get;set;}
public string Name {get;set;}
public Product[] ProductsContributedTo {get;set;}
}我有一个Contributor集合,我希望过滤这些集合,以便:
Contributor数组中存在作者角色记录的情况下的Contributor.ProductsContributedTo记录。Contributor.ProductsContributedTo数组应该只包括作者角色。以下是我迄今为止的尝试:
var authors = contributors.SelectMany(people => people.ProductsContributedTo
.Where(product => product.Role == "Author")
.Select(c => people))
.ToList();因此,通过选择正确的贡献者记录,这是可行的,但是如何过滤Contributor.ProductsContributedTo,使其只包含作者角色?
这是一个小提琴,证明我有3名贡献者记录巴里柯林斯,玛吉芬威克和塞奇威克福利。上面的LINQ查询只正确地选择了麦琪·芬威克和巴里·柯林斯,但是我如何过滤Contributor.ProductsContributedTo数组,使我只拥有他们各自的作者产品记录?
https://dotnetfiddle.net/hScdi4
编辑:
我对Fiddle做了一点小小的修改,因为每个Contributor都可以编写多个Product,所以我想说明这一点。
发布于 2018-06-28 11:13:19
在将贡献者选择为可验证后,可以删除具有"Author:“以外角色的产品:
var authors = contributors.SelectMany(people => people.ProductsContributedTo
.Where(product => product.Role == "Author")
.Select(c => people))
.ToList();
authors.ForEach(people => people.ProductsContributedTo.RemoveAll(item => item.Role != "Author")));然后处理你的变量。
希望能帮上忙。
https://stackoverflow.com/questions/51080652
复制相似问题