2012-10-16 54 views
3

我一直在嘗試用yamlserializer庫構建一個YAML節點。但是我很難構建LINQ語句。LINQ構建數組,每個選擇有多個值

我有一個「類別」對象的列表,我們可以稱它爲「貓」,Category類同時包含一個Id和一個名稱,需要用以下方式表示爲Yaml Mappings。 貓[0] .ID:貓[0]名稱 貓[1] .ID:貓[1],請將.Name ...

對於那些沒有與圖書館工作。 YamlMapping類有一個構造函數,它接受一個YamlNode對象的數組。 YamlNode是一個抽象類,包括YamlMapping在內的所有類型的節點都將繼承該類。

new YamlMapping 
(
    "Categories", new YamlMapping (
    (from cat in blacklist.Categories.List select 
    (YamlNode)cat.Id AND (YamlNode)cat.Name).ToArray()); 
) 

上述顯然不起作用,我想知道是否有任何方法來實現預期的結果。 可以事先構建陣列,但想知道是否有更多的LINQish(?)方式來實現相同的效果。

換句話說,數組構建必須是這樣的。

YamlNode[] arr; 
arr[0] = Cats[0].Id 
arr[1] = Cats[0].Name; 
arr[2] = Cats[1].Id; 
arr[3] = Cats[1].Name; 
...... 

回答

2

喜歡的東西:

(from cat in blacklist.Categories.List select 
new YamlNode[] { (YamlNode)cat.Id, (YamlNode)cat.Name }).SelectMany(x => x).ToArray()); 

應該做的伎倆。

1

如果您想選擇每件物品的序列(在這種情況下,一對)到一個單一的扁平序列,使用SelectMany

YamlNode[] arr = blacklist.Categories.List 
    .SelectMany(cat => new[] { (YamlNode)cat.Id, (YamlNode)cat.Name }) 
    .ToArray();