我正在使用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有关但我没有足够的技术知识可以潜入那里......
答案 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);