LINQ构建数组,每个选择具有多个值

时间:2012-10-16 09:20:57

标签: c# linq yaml

我一直在尝试使用yamlserializer库构建一个YAML节点。但我在构建LINQ语句时遇到了困难。

我有一个"类别"对象,我们称之为" Cats",Category类同时具有Id和Name,需要以下列方式表示为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 个答案:

答案 0 :(得分:2)

类似的东西:

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

应该这样做。

答案 1 :(得分:1)

如果要将每个项目的序列(在本例中为一对​​)选择为单个平面序列,请使用SelectMany

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