我正在尝试在LINQ中创建以下代码。我正在使用Linqpad来测试我的代码,但不断收到错误:
“NotSupportedException:不支持使用表达式http://localhost:14722/WCFDataservice.svc/RNIS_DRE_AREA_V构造或初始化类型<> f__AnonymousType0
2[LINQPad.User.RNIS_MAINTBOUNDARY_V,System.Linq.IQueryable
1 [System.Int32]]的实例。”
我的代码如下:
var roads =
from d in RNIS_MAINTBOUNDARY_V
let ts2 =
from dretab in RNIS_DRE_AREA_V
select dretab.DRE_CODE
where ts2.Contains(d.AUTH_ID)
select d;
roads.Dump();
作为参考,连接的2个字段,即auth_id和dre_code都是Oracle编号字段。为什么我会收到此错误?
答案 0 :(得分:0)
您的LINQ查询被转换为方法调用链
var roads = RNIS_MAINTBOUNDARY_V
.Select(d => new { d, ts2 = RNIS_DRE_AREA_V.Select(dretab => dretab.DRE_CODE) })
.Where(τ0 => τ0.ts2.Contains(τ0.d.AUTH_ID))
.Select(τ0 => τ0.d);
任何异常看起来LINQ to Entities都不喜欢{ d, ts2 = ... }
匿名类型。
尝试将内部查询移动到lambda:
var roads = RNIS_MAINTBOUNDARY_V
.Where(d => RNIS_DRE_AREA_V.Select(dretab => dretab.DRE_CODE).Contains(d.AUTH_ID));
LINQ to Entities也可能不喜欢 this ,所以你可以试试真正的联接:
var roads = RNIS_MAINTBOUNDARY_V
.GroupJoin(
RNIS_DRE_AREA_V,
d => d.AUTH_ID,
dretab => dretab.DRE_CODE
(d, dretabs) => new { d, count = dretabs.Count() })
.Where(p => p.count > 0)
.Select(p => p.d);