使用Linq从嵌套类返回新对象

时间:2018-08-22 11:33:35

标签: c# linq

我有一个包含另一个列表的元素列表。

public class SiloNode
{
    public string Key { get; private set; }
    public string Url { get; private set; }
    public List<NodeQuery> Queries { get; private set; }
}

public class NodeQuery
{
    public string Query { get; private set; }
    public int Seq { get; private set; }
}

我需要产生一个包含所有查询的新列表以及相应的父URL。

一个例子是:

输出应为LinkMeta类的形式。

public class LinkMeta
{

    public LinkMeta(string url, string text)
    {
        Url = url;
        Text = text;
    }

    public string Text { get; private set; }
    public string Url { get; private set; }
}

完整列表包含在:root.Children。

下面的查询为我提供了所有Query元素,但我无法返回到网址。

var filtered = root.Children.SelectMany(x => x.Queries.Select(y => y.Query));

2 个答案:

答案 0 :(得分:1)

您可以使用下面的linq来实现它。

if ($pullRequests.PSObject.Properties)
{
    "Object has properties so process it."
}
else
{
    "Object has no properties, ignore it."
}

它将返回LinkMeta的列表。希望对您有所帮助。

答案 1 :(得分:0)

Lambda表达式的作用域与嵌套块的作用域相同。这意味着嵌套的lambda表达式仍然可以访问变量“ x”。因此,您应该能够执行以下操作:

var filtered = root.SelectMany(x => x.Children.Queries.Select(y => new LinkMeta(x.Url, y.Query));