我如何通过Linq实现它?

she*_*bin 3 c# linq

例如,我有一个类如下:

public class SampleItem
{
    public string QCD { get; set; }
    public string CCD { get; set; }
    public string ITYPE { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后,我有一个清单:

var lstTest = new List<SampleItem>() { 

    new SampleItem(){ QCD = "Q1" ,  CCD = "C1" , ITYPE = "A"} ,
    new SampleItem(){ QCD = "Q1" ,  CCD = "C2" , ITYPE = "A"} ,
    new SampleItem(){ QCD = "Q1" ,  CCD = "C3" , ITYPE = "A"} ,

    new SampleItem(){ QCD = "Q1" ,  CCD = "C1" , ITYPE = "B"} ,
    new SampleItem(){ QCD = "Q1" ,  CCD = "C2" , ITYPE = "B"} ,
};
Run Code Online (Sandbox Code Playgroud)

我想得到2组

第1组:

new SampleItem(){ QCD = "Q1" ,  CCD = "C1" , ITYPE = "A"} ,
new SampleItem(){ QCD = "Q1" ,  CCD = "C2" , ITYPE = "A"} ,
new SampleItem(){ QCD = "Q1" ,  CCD = "C3" , ITYPE = "A"} ,
Run Code Online (Sandbox Code Playgroud)

第2组:

new SampleItem(){ QCD = "Q1" ,  CCD = "C1" , ITYPE = "B"} ,
new SampleItem(){ QCD = "Q1" ,  CCD = "C2" , ITYPE = "B"} ,
Run Code Online (Sandbox Code Playgroud)

所以,我只需要

lstTest.GroupBy (p=>new {p.QCD ,p.ITYPE});
Run Code Online (Sandbox Code Playgroud)

但现在,如果My List的订单如下所示

var lstTest = new List<SampleItem>() { 

    new SampleItem(){ QCD = "Q1" ,  CCD = "C1" , ITYPE = "B"} ,
    new SampleItem(){ QCD = "Q1" ,  CCD = "C2" , ITYPE = "B"} ,

    new SampleItem(){ QCD = "Q1" ,  CCD = "C1" , ITYPE = "A"} ,
    new SampleItem(){ QCD = "Q1" ,  CCD = "C2" , ITYPE = "A"} ,
    new SampleItem(){ QCD = "Q1" ,  CCD = "C3" , ITYPE = "A"} ,

    new SampleItem(){ QCD = "Q1" ,  CCD = "C1" , ITYPE = "B"} ,
    new SampleItem(){ QCD = "Q1" ,  CCD = "C2" , ITYPE = "B"} ,
};
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到3组

第1组:

new SampleItem(){ QCD = "Q1" ,  CCD = "C1" , ITYPE = "B"} ,
new SampleItem(){ QCD = "Q1" ,  CCD = "C2" , ITYPE = "B"} ,
Run Code Online (Sandbox Code Playgroud)

第2组:

new SampleItem(){ QCD = "Q1" ,  CCD = "C1" , ITYPE = "A"} ,
new SampleItem(){ QCD = "Q1" ,  CCD = "C2" , ITYPE = "A"} ,
new SampleItem(){ QCD = "Q1" ,  CCD = "C3" , ITYPE = "A"} ,
Run Code Online (Sandbox Code Playgroud)

第3组:

new SampleItem(){ QCD = "Q1" ,  CCD = "C1" , ITYPE = "B"} ,
new SampleItem(){ QCD = "Q1" ,  CCD = "C2" , ITYPE = "B"} ,
Run Code Online (Sandbox Code Playgroud)

通过LINQ

谢谢你的任何建议.

Ani*_*Ani 5

使用GroupAdjacent运营商,例如Eric White博客上列出的运营商, 您可以:

var groupedItems = lstTest.GroupAdjacent(p => new { p.QCD, p.ITYPE });
Run Code Online (Sandbox Code Playgroud)