LINQ实体在运行时构建查询'参数不在范围内。' LinqKit

时间:2012-11-21 20:19:51

标签: c# linq linqkit

我正在使用LinqKit(http://www.albahari.com/nutshell/linqkit.aspx)

有没有办法在不必定义具体类的情况下使用以下代码?

尝试使用LINQ to Entities构建强类型动态查询。

我收到The parameter 'o' is not in scope.错误。

在某些情况下。

void Main()
{   
    var lquery = from a in Foo select new { Bar = a.Baz }; // <-- error like this
    //var lquery = from a in Foo select new stuff { Bar = a.Baz }; // <-- here no error
    test("Case", lquery, o => o.Bar).Dump();
}

class stuff { public string Bar {get; set;} }

IQueryable<T> test<T>(string val, IQueryable<T> qry, Expression<Func<T, string>> selector){
    var ex = selector.Expand();
    var b = from c in qry.AsExpandable()
            where ex.Invoke(c).Contains(val)
            select c;
    return b;
}

当匿名类与test()一起使用时,如果使用具体类stuff,则会抛出此错误,然后没有错误。是否有一种解决方法可以在这种情况下使用匿名类?

我意识到这个错误可能与LinkKit有关但我没有足够的技术知识可以潜入那里......

1 个答案:

答案 0 :(得分:1)

LinqKit 中,我添加了对ExpressionExpander.VisitMemberAccess()的匿名类检查,以使匿名类生效。

relpaced

if (m.Member.DeclaringType.Name.StartsWith ("<>"))
    return TransformExpr (m);

string typeName = m.Member.DeclaringType.Name;
bool isAnonymous = typeName.StartsWith("<>f__AnonymousType"),
     isOuter = !isAnonymous && typeName.StartsWith("<>");
if (isOuter)
    return TransformExpr (m);