【问题标题】:C# - LINQ select distinct from list which contain listC# - LINQ 选择与包含列表的列表不同
【发布时间】:2015-11-19 08:45:37
【问题描述】:

好的,这就是我所拥有的。

public class A
{
    //Properties

    List<B> listB;

    //Methods
}

public class B
{
    //Properties

    public struct C
    {
        public byte D
        {
            get;
            set;
        }

        //Other propeties
    }

    public List<C> listC;

    //Methods
}


//..somewhere
A mydataA = new A();
mydataA.listB = new List<B>();
mydataA.listB.listC = new List<C>();

mydataA.listB.listC = JsonConvert.DeserializeObject<List<C>>(json);
//C.D will take values like 1, 2, 1, 2, 2, 3, 5, 2

我需要从每个C 中选择不同的D 值,因此结果将是1, 2, 3, 5 的列表。 现在,我正在选择这样的不同数据:

List<byte> mylist = new List<byte>();
foreach(var each_of_B in A.listB)
{
    foreach(var each_of_C in each_of_B.C)
    {
        mylist.Add(each_of_C.D);
    }
}

var res = mylist.GroupBy(t => t).Select(g => g.First()).ToList();

但这并不是很酷,因为我必须创建新列表,创建一些循环。有没有办法用一行来选择不同的数据,比如var res = mydataA.***.Select(g =&gt; g.First()).ToList();,我需要的是***

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    SelectMany 就是你要找的东西:

    var res = A.listB.SelectMany(b => b.C).Select(c => c.D).Distinct().ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-19
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多