这是我遇到麻烦的代码。我正在使用根据现有数据库建模的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该代码似乎不尊重我用*标记的
Where
和All
过滤器。它返回所有订单。请帮助我了解我在做什么错。非常感谢。 最佳答案
我想您要Any
而不是All
。通过使用All
表示订单上的所有收件人必须是加拿大人。 Any
将为您提供至少具有一个加拿大收件人的订单。
关于All
的另一条警告。它并不查找所有通过条件的项目,而是查找不符合条件的第一个项目。因此,如果您有零个项目,则没有任何不符合条件的项目,并且All
将始终返回true