簡體   English   中英

Linq如何縮小班級/自我加入的清單

[英]Linq How to deflate list of class/self join

我有以下課程的清單

class testdata {
    public string code { get; set; }
    public string[] values { get; set; }
}

如何執行聯接,以便獲得代碼和值的列表,即值將在每個代碼中重復,例如,如果列表中有兩個項目,例如

1."code1",{"value1","value2"}

2."code2",{"value1","value2","value3"}

我希望決賽采用以下格式

Code1,Value1

code1,Value2

Code2,value1

code3,value2

code3,value3

我想通過LINQ和匿名類來實現它,我能夠通過循環並根據最終結構創建一個類來實現它。

myList.SelectMany(td => td.values.Select(v => new { td.code, v } ))

SelectMany說:“采用許多IEnumerable,並將它們的元素連接到一個IEnumerable中”

td是列表中的單個元素。 它是testdata的單個實例

因此,您現在可以對td.values進行Select以創建單個匿名對象。 Select將返回一個IEnumerable,但包裝在SelectMany ,許多IEnumerable<anonymous object>實例將被平整為單個IEnumerable<anonymous object>

嘗試這個

            List<TestData> testData = new List<TestData>() {
                new TestData() { code = "Code1", values = new string[] {"Value1","Value2"}},
                new TestData() { code = "Code2", values = new string[] {"value1"}},
                new TestData() { code = "code3", values = new string[] {"value2","value3"}}
            };

            var results = testData.Select(x => x.values.Select(y => new { code = x.code, value = y })).SelectMany(y => y).ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM