如何使用动态linq通过嵌套数组进行查询?

时间:2012-07-13 18:48:23

标签: linq

如果我的课程结构如下:

    private class A
    {
        int afoo { get; set; }
        B[] bList { get; set; }
    }

    private class B
    {
        String bfoo { get; set; }
        C[] cList { get; set; }
    }

    private class C
    {
        String cfoo { get; set; }
        int cfoo2 { get; set; }
    }

    public class Master
    {
        A[] aList;

        //qry for all where A.B.C.cfoo = "test"
    }

如何构造动态LINQ语句来查询C类中的项?像这样的东西

1) var qry = aList.blist.clist.AsQueryable().Where("cfoo = \"Test\"").Select();

我的最终解决方案是在动态部分中传递整个路径,如下所示:

2) var qry = aList.AsQueryable().Where("bList.cList.cFoo = ""Test"").Select();

但是根据我的尝试,你不能在Where中拥有嵌套对象。因此,我将使用模板来构建上述1)中的方法。

[另外,我使用Scott Gu的动态库作为动态部分。]

但是,我无法让它发挥作用。有什么建议吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

aList.SelectMany(a => a.bList)
     .SelectMany(b => b.cList)
     .Where(c => c.cfoo == "\"Test\"");

答案 1 :(得分:0)

试试这个:

aList.SelectMany(a => a.bList.SelectMany(b => b.cList))
    .Where(c => c.cf002 == "Test")
    .Select();