繁体   English   中英

LINQ实体在运行时生成查询“参数不在范围内。” LinqKit

[英]LINQ Entities build Query at Runtime 'The parameter is not in scope.' 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有关,但我没有足够的技术知识来深入探讨...

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM