如何使用linq将数据列表分组到另一个列表中?

时间:2016-03-23 09:31:21

标签: c# linq

我有一个数据列表(Element),它包含另一个列表(SourceElement)。我想获得所有的linkid属性而不重复它们。我怎么能这样做?

public class Element
{
    public int ElementId { get; set; }
    public List<SourceElement> Source { get; set; }
}

public class SourceElement
{
    public int SourceElementId { get; set; }
    public int LinkId { get; set; }     
}

现在就是这样

  • 示例(元素):

    ElementId = 1来源= {1,2},{1,3},{1,4},{1,7}

    ElementId = 2来源= {2,2},{2,3},{2,4},{2,8}

最终输出必须是这样的。

LinkIds = {2,3,4,7,8}

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

假设您有elements的列表:

var linkIds = elements.SelectMany(e => e.Source)
                     .Select(s => s.LinkId)
                     .Distinct();

答案 1 :(得分:0)

使用SelectMany并获取所有SourceElement个集合,一旦在LinkId上获​​得扁平数组Distinct

var output = string.Join(",", elements.SelectMany(s=>s.Source)
                                      .Select(l=>l.LinkId)
                                      .Distinct()
                        ); 

var formattedoutput = String.Format("LinkIds = {{0}}",  output);

<强>输出

LinkIds = {2,3,4,7,8}