[英]Call Expression within a LINQ to Entities Select with 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.