为什么Linq不能将表达式/视为本地表达式并抛出exception?
我在这里问了一个关于Linq-to-SQL与C#代码混合导致的Linq错误的问题。 简而言之,编译器会感到困惑,并且没有意识到您打算在从数据库返回后调用结果集上的本地函数。
我接受的答案是在结果集上使用AsEnumerable()
,因此在进行任何进一步的计算之前强制它返回所有列。
我现在的问题是,以一种非常类似的方式,我现在尝试通过外键调用与我的结果集相关的对象的方法,例如:
var q = from c in MyCities.AsEnumerable() // note the AsEnumerable, forcing the query to execute before accessing properties of c let cy = c.County select new { CityName = c.Name, CountyName = cy.Name, CountyFoo = cy.Foo() };
猜猜是什么 – 这再次引发了’exception’。 为什么? 很明显,因为我们需要再次返回数据库才能加载相关的c
County
。 只有这一次,我不能调用AsEnumerable()
,因为c
只有一个县,而不是一个集合!
Dwat那是因为wabbit!
我如何解决这个问题?
另外一个级别的间接应该修复它,虽然我不知道这是多么可读。 从结果集中删除CountyFoo = cy.Foo()
和CountyName = cy.Name
并将其替换为County = cy
给你..
var q = from c in MyCities.AsEnumerable() let cy = c.County select new { CityName = c.Name, County = cy };
然后加
var p = q.AsEnumerable().Select(x => new { CityName = x.CityName, CountyName = x.County.Name, CountyFoo = x.County.Foo() });
然后你可以枚举p
。 不过,这是非常模糊的。 为什么你需要所有这些LINQ查询?
上述就是C#学习教程:为什么Linq不能将表达式/视为本地表达式并抛出exception?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1017026.html