C# ORA-00904从linq生成的查询上的标识符无效
我有这个linq:-C# ORA-00904从linq生成的查询上的标识符无效,c#,oracle,linq,C#,Oracle,Linq,我有这个linq:- var query = from r in Ctx.Reg select new { IdReg = r.Id, ... Status1 = r.Hist.OrderByDescending(o => o.Id).Take(1).Any(x=> x.Status == 2), Status
var query = from r in Ctx.Reg
select new
{
IdReg = r.Id,
...
Status1 = r.Hist.OrderByDescending(o => o.Id).Take(1).Any(x=> x.Status == 2),
Status2 = r.Hist.OrderByDescending(o => o.Id).Skip(1).Take(1).Any(x=> x.Status == 5)
};
生成的查询包含:
WHERE ("Extent1"."REP_ID" = "Extent2"."REP_ID")
我明白了
ORA-00904:“扩展1”,“代表ID”
这两列都存在并且具有相同的数据类型。
我能为这个问题做些什么?我不知道确切的原因,但它是有效的:
var query = from r in Ctx.Reg
select new
{
IdReg = r.Id,
...
Status1 = Ctx.RegHist.OrderByDescending(o => o.Id).Any(x=> x.RegId == r.Id && x.Status == 2),
Status2 = Ctx.RegHist.OrderByDescending(o => o.Id).Skip(1).Any(x=> x.RegId == r.Id && x.Status == 5)
};
我不知道确切的原因,但它是有效的:
var query = from r in Ctx.Reg
select new
{
IdReg = r.Id,
...
Status1 = Ctx.RegHist.OrderByDescending(o => o.Id).Any(x=> x.RegId == r.Id && x.Status == 2),
Status2 = Ctx.RegHist.OrderByDescending(o => o.Id).Skip(1).Any(x=> x.RegId == r.Id && x.Status == 5)
};
如果没有“全部oracle”查询,则不清楚(即使它很大)。顺便问一下,你为什么不使用
r.Hist.Any()
和r.Hist.Count()>1
来代替状态1和状态2的take/skip/Any?我有一个我忘记在Any()语句中写的子句,比如:Any(x=>x.Status==2)@Lennonfereira也许您可以在查询中返回Hist
项,然后在Linq中对对象执行该逻辑。我不能这样做,因为查询结果返回分页网格的数据,并且我从Hist获得的这两个状态可能会影响该数据,我需要在执行之前执行所有逻辑如果没有all oracle查询,则无法清除(即使它很大)。顺便问一下,为什么不使用r.Hist.Any()
和r.Hist.Count()>1
来代替status1和status2的take/skip/Any呢?我忘了在Any()语句中写一个子句,比如:Any(x=>x.Status==2);@lennonfereira也许你可以返回查询中的Hist
项,然后在Linq中对对象执行该逻辑。我不能这样做,因为查询结果返回分页网格的数据,我从Hist获得的这两个状态可能会影响该数据,我需要在执行之前执行所有逻辑