[英]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.