使用Linq执行:编译对象列表中所有列表的列表

时间:2012-05-02 16:48:24

标签: c# linq

我确信Title很清楚,所以让我举一个例子,看看是否有人能指出我正确的方向:

public class topObj
{
    public List<midObj> Mids { get; set; }
    public List<botObj> Bots { get { // do some LINQ magic here } }
}
public class midObj
{
    public List<botObj> Bots { get; set; }
}
public class botObj
{
}

所以,从顶层对象我想要获取List&lt;&gt;中所有底部对象的列表。列表中的任何中间对象的&lt;&gt;来自顶层对象。

现在我有这样的事情:

public List<botObj> Bots
    {
        get
        {
            List<botObj> lst = new List<botObj>();
            foreach (midObj mo in Mids)
            {
                lst.AddRange(mo.Bots);
            }

            return lst;
        }
    }

当然,它有效,但我必须假设LINQ可以用更少的行来实现这一点。

2 个答案:

答案 0 :(得分:3)

 get { return Mids.SelectMany(mid => mid.Bots).ToList(); }

我至少还要考虑只返回IEnumerable<botObj>而不是List,这样您只需要花费精力评估所有内容并将其放入列表中(如果您确实需要)。如果您通过使用列表知道自己在做什么,请随意忽略此评论。

答案 1 :(得分:0)

你必须做这样的事情:

get{ Mids.SelectMany(x => x.Bots).ToList(); }

希望它有所帮助!