LINQ语句,用于解析多个集合并获取单个List

时间:2014-02-25 11:38:55

标签: c# linq

我想知道是否有更好/更快的方法来编写以下LINQ语句。

首先让我告诉你我的班级定义:

public class FooA
{
    public List<FooB> ListFooB { get; set; }
}

public class FooB
{
    public List<FooC> ListFooC { get; set; }
}

public class FooC
{
    public List<FooD> ListFooD { get; set; }
}

现在我有一个存储FooA列表的类,我需要在FooC定义中使用FooD,所以我的LINQ如下所示:

public class MagicFoo
{
    public List<FooA> ListFooA { get; set; }

    public void DoSomeMagicWithFooD()
    {
        var fooDs = from a in ListFooA
                    from b in a.ListFooB
                    from c in b.ListFooC
                    from d in c.ListFooD
                    select d;

        foreach (var fooD in fooDs)
        {
            //Do your magic with fooD...
        }
    }
}

是否有更好/更快的方式来编写LINQ?

2 个答案:

答案 0 :(得分:4)

嗯,就效率而言,为了在从查询表达式到SelectMany调用的转换中使用透明标识符,创建了许多额外的对象。您可以将其转换为:

var fooDs = ListFooA.SelectMany(a => a.ListFooB
                        .SelectMany(b => b.ListFooC
                           .SelectMany(c =>  c.ListFooD)));

效率更高,但可读性更低。

答案 1 :(得分:-2)

fooDs.ToList()。ForEach(c =&gt; c.foodd.ToList());