[英]Need help on Linq with group by and distinct
我正在嘗試執行一個分組,然后由一個非重復分組來驗證一組列是否僅映射到其他列。 例如,在下面的數據集中
Brand Product Location Customer Demand
Box A Chicago Chicago 10
Box B Chicago Milwaukee 20
Cart C Madison Milwaukee 10
Cart D Chicago Milwaukee 15
產品A,B,C有效。 但是D無效,因為存在一個產品B,其中芝加哥為Location,密爾沃基為客戶。 我試圖建立一個LINQ查詢來獲取異常記錄並遇到一些麻煩。 我非常確定我的查詢過於復雜。
var vDuplicateSupplierLitho = from p in vRecords
group p by new
{
Location = p["Location"].Cast<string>(),
Customer = p["Customer"].Cast<string>()
} into grp
select new
{
Location = grp.Key.Location,
Customer = grp.Key.Customer,
Products = from a in grp
group a by new { Product = a["Product"].Cast<string>() } into apngrp
where apngrp.Count() > 1 && apngrp.Select(a => a["Product"]).Distinct().Count() > 1
from NonUniqueRecord in apngrp
select new
{
Product = apngrp.key.Product,
Location = g.key.Location,
Customer = g.key.Customer
Demand = NonUniqueRecord["Demand"]
}
};
謝謝。
new[] {
new { Brand = "Box", Product = "A", Location = "Chicago", Customer = "Chicago", Demand = 10 },
new { Brand = "Box", Product = "B", Location = "Chicago", Customer = "Milwaukee", Demand = 20 },
new { Brand = "Cart", Product = "C", Location = "Madison", Customer = "Milwaukee", Demand = 10 },
new { Brand = "Cart", Product = "D", Location = "Chicago", Customer = "Milwaukee", Demand = 15 },
new { Brand = "Cart", Product = "C", Location = "Madison", Customer = "Milwaukee", Demand = 10 }
}
.GroupBy(o => new { o.Location, o.Customer })
.Where(g => g.Select(o => o.Product).Distinct().Count() > 1)
.SelectMany(g => g)
...或者,在查詢語法中...
from record in new[] {
new { Brand = "Box", Product = "A", Location = "Chicago", Customer = "Chicago", Demand = 10 },
new { Brand = "Box", Product = "B", Location = "Chicago", Customer = "Milwaukee", Demand = 20 },
new { Brand = "Cart", Product = "C", Location = "Madison", Customer = "Milwaukee", Demand = 10 },
new { Brand = "Cart", Product = "D", Location = "Chicago", Customer = "Milwaukee", Demand = 15 },
new { Brand = "Cart", Product = "C", Location = "Madison", Customer = "Milwaukee", Demand = 10 }
}
group record by new { record.Location, record.Customer } into grouping
where (from o in grouping select o.Product).Distinct().Count() > 1
from duplicate in grouping
select duplicate
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.