DB:
我试图仅在ReviewItems的All
满足ReviewItemStatus == 3的条件时才返回数据。这有效。
问题:但是我希望将All
的范围缩小到所有ReviewIID,其中ReviewerID == 1000
// I want ALL groupAccountLinks only for ReviewerID==1000 and AccountID
// 0) (and thus ReviewItems) for Account Charlie have ReviewItemStatusID==3
var xx = Accounts.Where(acc => acc.GroupAccountLinks.All(gal =>
// do ANY of the (1) associated reviewItems contain ri.ReviewItemStatusID == 3
gal.ReviewItems.Any(ri => ri.ReviewItemStatusID == 3)
// This doesn't work
//&& ri.Review.ReviewerID == 1000
)
&& acc.AccountID == 1002 // Charlie
);
将针对EF4.1正在使用Linqpad和LinqToSQL测试db。
进行测试答案 0 :(得分:0)
你有&&条件。所以,我认为你的表没有AccountId
= 1002而且所有ReviewItemStatusID
= 3。所以改变&&条件到||条件。
答案 1 :(得分:0)
我要做的第一件事就是关闭&& acc.AccountID == 1002
并确保您获得状态为3 Accounts
的整个未经过滤的ReviewItem
。如果看起来不错,请尝试以这种方式进行过滤:
var xx = Accounts
.Where(acc => acc.GroupAccountLinks
.All(gal => gal.ReviewItems
.Any(ri => ri.ReviewItemStatusID == 3))
.FirstOrDefault(acc => acc.AccountID == 1002);
答案 2 :(得分:0)
感谢Jesse,Slauma和RemeshRams带领我这样做:
var xxx = Accounts.Where(
// do All Accounts satisfy condition
u => u.Accounts.All(
// do All GroupAccountLinks (and thus ReviewItems) for Account meet the condition of ReviewItemStatusID==3
acc => acc.GroupAccountLinks.All(
// for ReviewItems where ReviewerID==1000, do they All have ReviewItemStatusID==3
gal => gal.ReviewItems.Where(
ri => ri.Review.ReviewerID == 1000)
.All(
ri => ri.ReviewItemStatusID == 3
)
// Make sure there are some ReviewItems
&& gal.ReviewItems.Any()
)
)
);