使用C#LINQ展开嵌套列表

时间:2016-04-07 09:07:23

标签: c# linq

假设我有以下数据,

data: {
    variations: [{
        steps: [
            { Name: "Crawl", Status: "Complete" },
            { Name: "Walk", Status: "InProgress" }
        ]
    },{
        steps: [
            { Name: "Crawl", Status: "Complete" },
            { Name: "Walk", Status: "Complete" },
            { Name: "Run", Status: "NotStarted" }
        ]
    }]
}

如何使用LINQ获取这组数据?生成的数据集是所有变体的独特步骤。

[
    { Name: "Crawl", Status: "Complete" },
    { Name: "Walk", Status: "InProgress" },
    { Name: "Walk", Status: "Complete" },
    { Name: "Run", Status: "NotStarted" }
]

我尝试了很多Select的组合,但我没有运气。

2 个答案:

答案 0 :(得分:3)

使用.SelectMany(..),然后执行.Distinct(...)以消除第二个抓取对象。

var result = data
    .SelectMany(x => x.Steps)
    .Distinct()
    .ToArray();

这确实需要您实施IEquatable<T>并覆盖.GetHashCode().Equals()

答案 1 :(得分:0)

对于不想实现平等的人们:

arr.map((el,index) => {
return <Item
           id={index}
           key={el}
           itemId={itemId}
           item={el}
           handleItemClick={handleItemClick} 
        />;
});