2
我想通过Linq中的记录获取组中存在记录的结果。 我有在SQL查询,但我在努力得到它在LINQ如何检查记录存在于按linq分组的子查询中sql
在SQL查询
select LEVEL, DESCR
from ACTIVITY_LKUP
WHERE LEVEL IN (//Checking row exists
select TOP 2 b.LEVEL
from ACTIVITY_LKUP b
WHERE b.LEVEL > (
select max(b.LEVEL)
from ACTIVITY a, ACTIVITY_LKUP b
WHERE b.TYPE = a.ACTIVITY_TYPE
and a.JOB_CANDIDATE_ID = 1
)
group by b.level //Grouping here
)
order by LEVEL
在LINQ查询
var duplicate =(from lkup in ACTIVITY_LKUP
where lkup.LEVEL== (from actlk in ACTIVITY_LKUP //Iam Not able to check row exists in the group by
where actlk.LEVEL >
(
from act in ACTIVITY
join lkup in ACTIVITY_LKUP on act.ACTIVITY_TYPE equals lkup.TYPE
where act.JOB_CANDIDATE_ID == 1
orderby lkup.LEVEL
select lkup.LEVEL
).First()
group actlk by actlk.LEVEL into lggrp
select new { LEVEL = lggrp.Key,DESCR=lggrp.Select(x=>x.DESCR)
}).Take(2)
select lkup)
显示错误行“操作员“ =='不能应用于'int?'类型的操作数和“System.Linq.IQueryable”。
我们如何在LINQ中做到这一点?帮助我的人。
它看起来像lkup.LEVEL是'int?'或可为空而用于比较的价值回报是一个集合或'IQueryable '这在您使用''Take(2)'时会有意义,在这种情况下将返回长度为2的IQueryable 。您可以尝试更改将(2)改为.FirstOrDefault()。 –
CalebB
另外[这里](http://stackoverflow.com/questions/1024559/when-to-use-first-and-when-to-use-firstordefault-with-linq)是一个很好的问题,它描述了First()/ FirstOrDefault()和Take(int)的返回值。 – CalebB