C# - LINQ选择与包含列表的列表不同

时间:2015-11-19 00:42:52

标签: c# linq

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

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

我需要从每个D中选择C的不同值,因此结果将是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();

但它并不酷,因为我必须创建新的List,创建一些循环。有没有办法用一行选择不同的数据,如var res = mydataA.***.Select(g => g.First()).ToList();,其中***是我需要的?

1 个答案:

答案 0 :(得分:2)

SelectMany是您正在寻找的:

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