gpt4 book ai didi

c# - LINQ 实体在运行时构建查询 'The parameter is not in scope.' LinqKit

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:48 24 4
gpt4 key购买 nike

我正在使用 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() 添加了对匿名类的检查,以使匿名类正常工作。

重新安排

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

关于c# - LINQ 实体在运行时构建查询 'The parameter is not in scope.' LinqKit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13501437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com