c#LINQ - 选择不同的子对象

时间:2018-03-19 18:23:33

标签: c# .net linq

我有以下由c#类表示的对象结构:

[
    {
        Title: "",
        Year: 1977,
        Categories: ["Action", "Adventure", "Fantasy"],
        Score: 96
    }
]

此json被序列化为IEnumerable<TitleItem>个对象,其中CategoriesIList<string>个对象。

TitleItem个对象的集合中,我想获得一个新的IList<string>个不同的类别。怎么办呢?

4 个答案:

答案 0 :(得分:1)

collection.SelectMany(x=>x.Categories).District().ToList()

答案 1 :(得分:1)

您可以使用SelectMany来&#34;展平&#34;类别列表然后使用Distinct

var result = titleItems.SelectMany(item => item.Categories).Distinct().ToList();

答案 2 :(得分:1)

您可以在SelectMany上执行distinct然后IEnumerable

IEnumerable<TitleItem> items = getItemsFromSomeWhere();
var uniqueTitles = items.SelectMany(i => i.Categories).Distinct().ToList();

答案 3 :(得分:-1)

以下是将返回不同类别的查询

class TitleItem {
    public string Title;
    public string Year;
    public float score;
    public IList<string> Categories;
}

var titleItems = new List<TitleItem>();
var titleItem1 = new TitleItem();
titleItem1.Categories = new List<string>();
titleItem1.Categories.Add("Action");
titleItem1.Categories.Add("Adventure");
titleItem1.Categories.Add("Fantasy");
titleItem1.Categories.Add("Action");
titleItems.Add(titleItem1);

var titleItem2 = new TitleItem();
titleItem2.Categories = new List<string>();
titleItem2.Categories.Add("Action");

titleItems.SelectMany(a => a.Categories).Distinct();