首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LINQ Fluent语法-取消数组中的项

LINQ Fluent语法-取消数组中的项
EN

Stack Overflow用户
提问于 2018-06-28 10:31:39
回答 4查看 387关注 0票数 0

我在为一个流利的LINQ查询而挣扎。我有一个带有Contributor数组的Product对象:

代码语言:javascript
运行
复制
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集合,我希望过滤这些集合,以便:

  1. 我只选择在Contributor数组中存在作者角色记录的情况下的Contributor.ProductsContributedTo记录。
  2. 每个贡献者Contributor.ProductsContributedTo数组应该只包括作者角色。

以下是我迄今为止的尝试:

代码语言:javascript
运行
复制
 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,所以我想说明这一点。

EN

Stack Overflow用户

发布于 2018-06-28 11:13:19

在将贡献者选择为可验证后,可以删除具有"Author:“以外角色的产品:

代码语言:javascript
运行
复制
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")));

然后处理你的变量。

希望能帮上忙。

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51080652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档