Linq连接获取空行过滤器的位置

时间:2014-05-12 14:57:43

标签: linq join null

我加入了三张桌子。商店,商店报告和报告。

Store table
StoreId 
Storename.

Report table
ReportId
ReportName

StoreReport table
StoreId
ReportId

我想获得所有尚未填写特定报告的商店。 到目前为止,我有这个,但它也计算与其他报告相关的人。

var reports = from u in db.tblStores
                              join sr in db.tblStoreReports.Where(a => a.ReportId != reportId && !a.Deleted)
                        on u.StoreId equals sr.StoreId into g
                    where !g.Any()
                    select u;

2 个答案:

答案 0 :(得分:1)

from u in db.tblStores
where !u.StoreReports.Any(a => a.ReportId == reportId && !a.Deleted)
select u

您可以使用!.Any确保其Report没有id

答案 1 :(得分:1)

不简单吗?您可以在没有加入的情况下使用Where

var reports = from u in db.tblStores
              where !db.tblStoreReports.Any(sr => sr.StoreId == u.StoreId 
                                               && sr.ReportId == reportId 
                                               && !sr.Deleted)
              select u;