Linq使用'not exists'和'group by'对象?

Kei*_*ers 2 c# linq fluent-nhibernate

我已经分配了一个使用NHibernate的新项目.我可以在sql中轻松编写的查询让我完全难以理解如何在linq中执行此操作,这就是我被告知要执行此操作的方式.

所以,这是查询:

select  ts.BatchID, COUNT(distinct ts.UniqID) SurveyCount
from    TeleformStaging.TeleformStaging ts
where   ts.IsRescan = 0
and     not exists (select  bfr.BatchID
                    from    TeleformStaging.BatchesForRescan bfr
                    where   bfr.BatchTrack = ts.BatchID)
group by ts.BatchID
order by ts.BatchID
Run Code Online (Sandbox Code Playgroud)

我相信我可以得到'分组'部分,但不知道子查询.

谢谢你的任何建议......

Ari*_*ion 5

也许是这样的:

var result= (
        from ts in db.TeleformStaging
        where ts.IsRescan == false //if is a boolean else == 0
        && 
        !(
            from bfr in db.BatchesForRescan
            select bfr.BatchTrack
        ).Contains(ts.BatchID)
        orderby ts.BatchID
        group ts by ts.BatchID into g
        select new
        {
            BatchID=g.Key,
            SurveyCount=g.Select (x =>x.UniqID).Distinct().Count()
        }
    );
Run Code Online (Sandbox Code Playgroud)

其中db是linq数据上下文

编辑

你也可以这样做.Any().像这样:

var result= (
        from ts in db.TeleformStaging
        where ts.IsRescan == false //if is a boolean else == 0
        && 
        !(
            from bfr in db.BatchesForRescan
            where ts.BatchID==bfr.BatchTrack
            select bfr.BatchTrack
        ).Any()
        orderby ts.BatchID
        group ts by ts.BatchID into g
        select new
        {
            BatchID=g.Key,
            SurveyCount=g.Select (x =>x.UniqID).Distinct().Count()
        }
    );
Run Code Online (Sandbox Code Playgroud)

编辑1

有用的链接: