这是我遇到麻烦的代码。我正在使用根据现有数据库建模的EDMX。

// All orders completely shipped Grouped by RefId

                var RefIdsWithAllShippedOrders = mydbcontext.OrderDetails
                    .Where(s => s.Application.CustomerID == "MSFT")
                    .GroupBy(o => o.RefId)
                    .Where(t => t.All(i => i.Status.Description.ToUpper() == "SHIPPED"))
                    .Select(g => g.Key);

   // Iterate through the RefIds
    foreach (var refid in RefIdsWithAllShippedOrders)
                {

               // Gather all the orders that have the same RefIds
               var OrdersForThisRefid = (from o in mydbcontext.OrderDetails
                                        where o.RefId == refid
                                        select o).AsEnumerable();

 //gather all the orders with at least one Canadian recipient
 var orderswithcandianrecipients  = from o in OrdersForThisRefId
                                   where o.OrderRecipients.All( w=> w.Country.Trim().ToUpper() == "CANADA") // ****
                                   select o;
             // Print RefIds of the orders that have at least one Canadian recipient
             foreach (var eachorder in orderswithcandianrecipients)
             {
                  Console.WriteLine(eachorder.RefId);
             }

      }


这是我的架构:

订单详细信息

 RefId      OrderId (PK)
 ABC001     00001
 ABC001     00002
 ABC001     00003
 ABC002     00004
 ABC002     12355


订单收货人

 PK     OrderID (FK)    NAME         COUNTRY
 1      00001           LINCOLN      USA
 2      00001           JEFFERSON    USA
 3      00001           WASHINGTON   CANADA
 4      00001           FRANKLIN     USA
 5      00002           GRANT        USA
 6      00002           WILSON       USA
 7      12355           FORD         CANADA
 8      12355           JOHNSON      USA


我希望得到的结果是var类型,其中包含至少具有一个加拿大收件人的订单。在上面的示例中,将是OrderID = 00001和12355的Orders

该代码似乎不尊重我用*标记的WhereAll过滤器。它返回所有订单。请帮助我了解我在做什么错。非常感谢。

最佳答案

我想您要Any而不是All。通过使用All表示订单上的所有收件人必须是加拿大人。 Any将为您提供至少具有一个加拿大收件人的订单。

关于All的另一条警告。它并不查找所有通过条件的项目,而是查找不符合条件的第一个项目。因此,如果您有零个项目,则没有任何不符合条件的项目,并且All将始终返回true

10-07 19:40
查看更多