ここに問題があるコードがあります。私は既存のデータベースからモデル化されたEDMXを使用しています。ここでLINQ with Where and Allはデータをフィルタリングしない - このクエリで何が問題になっていますか?
// 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);
}
}
は、私が持っているスキーマです:私は得ることを望んだ
ORDERDETAILS
RefId OrderId (PK)
ABC001 00001
ABC001 00002
ABC001 00003
ABC002 00004
ABC002 12355
ORDER受信者
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
タイプです少なくともカナダ人の受取人が少なくとも1人いること。上記の例では、それが受注コード= 00001と12355
コードと受注だろう、私が*が付いているWhere
とAll
フィルタを尊重していないようです。すべての注文を返します。何が間違っているのか理解してください。どうもありがとうございます。
ありがとうございます@ cadrell0。しかし、カナダの受取人がいなくても、すべての注文を返すのはなぜですか? – FMFF
私は自分の答えを更新しました。私は注文00002を説明することはできませんが、それは他のものを説明する必要があります。 – cadrell0
あなたは正しいです。これはQA /開発データベースであり、私はOrderDetailsテーブル内のすべてのオーダーについて受信者が設定されていません。つまり、常にTrueを返します。私にcaldrell0を教えていただきありがとうございます。だからAnyはそのような場合に動くはずですか? – FMFF