假設我有兩組;糖果和地區。對於每個糖果,我都有一個糖果在某個區域(CandyRegion)中被稱爲的一對多名稱。從最高計數組中選擇值
我想創建一個只有一個CandyRegion.Name被選中的Candy對象列表。所選CandyRegion.Name由最受歡迎的地區(該地區可用的糖果數量最多)決定。
什麼是一種合適的方式來執行查詢來找到最流行的地區?我到目前爲止:
context.Candys
.Select(c => c.CandyRegions
.OrderByDescending(cr =>
/*
* Order CandyRegion by Candy.CandyRegion.Count outside
* the context of c?
*/
context.CandyRegions.Count(cr2 => cr2.RegionId == cr.RegionId)
)
.FirstOrDefault()
)
.ToList();
我有一種感覺,上述查詢的性能將是一個問題。
編輯:類
public class Candy
{
public int Id { get; set; }
...
public virtual List<CandyRegion> CandyRegions { get; set; }
}
public class Region
{
public int Id { get; set; }
...
public virtual List<CandyRegion> CandyRegions { get; set; }
}
public class CandyRegion
{
public int Id { get; set; }
public string Name { get; set; }
...
public int RegionId { get; set; }
public virtual Region Region { get; set; }
public int CandyId { get; set; }
public virtual Candy Candy { get; set; }
}
你提到你有兩套。通過你的代碼片斷,糖果對象包含一系列糖果區域,是否正確?如果是這樣的話,你在技術上有一個包含一個集合的對象,而不是兩個單獨的集合,這意味着你需要某種連接子句。 – 2015-02-06 04:28:53
@JamesShaw是的,CandyRegion是糖果和地區的集合。地區將是第二套。糖果和地區加入CandyRegion。 – 2015-02-06 04:42:13
@DamonPollard我想你應該也發佈有問題的糖果和地區類!它會造成混淆。 – 2015-02-06 04:54:49