0

D B:

在此处输入图像描述

All只有当ReviewItems 满足 ReviewItemStatus==3 的条件时,我才尝试带回数据。这行得通。

问题:但是我想将范围缩小All到 ReviewerID==1000 的所有 ReviewItems

 // 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 测试数据库进行测试。

4

3 回答 3

0

你有 && Condition 。所以,我认为你的表没有 all AccountId=1002 和 All ReviewItemStatusID=3 。所以将 && 条件更改为 || 健康)状况。

于 2013-05-23T16:45:23.073 回答
0

我要做的第一件事是&& acc.AccountID == 1002关闭并确保您获得了状态为 3 的整个未过滤集AccountsReviewItem如果看起来不错,请尝试以这种方式进行过滤:

        var xx = Accounts
                  .Where(acc => acc.GroupAccountLinks
                                   .All(gal => gal.ReviewItems
                                          .Any(ri => ri.ReviewItemStatusID == 3))
                         .FirstOrDefault(acc => acc.AccountID == 1002);
于 2013-05-23T16:54:19.843 回答
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()
                                                        )
                        )
            );
于 2013-05-28T15:38:55.027 回答