【发布时间】:2015-02-06 04:09:27
【问题描述】:
假设我有两套;糖果和地区。对于每个 Candy,我都有一对多的名称来说明该糖果在某个区域 (CandyRegion) 中的名称。
我想构建一个 Candy 对象列表,其中只选择了一个 CandyRegion.Name。选择的 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; }
}
【问题讨论】:
-
你提到你有两套。通过您的代码 sn-p,糖果对象包含糖果区域的集合,对吗?如果是这种情况,从技术上讲,您有一个包含一个集合的对象,而不是两个单独的集合,这意味着您需要某种形式的连接子句。
-
@JamesShaw 是的,CandyRegion 是关于 Candy 和 Region 的集合。地区将是第二组。 CandyRegion 加入了 Candy 和 Region。
-
@DamonPollard 我认为您还应该发布有问题的 Candy 和 Region 课程!它造成混乱..
-
额外的 sn-p 绝对可以更轻松地确定您要完成的工作以及如何完成。
-
Candy 到 Region 似乎可以是多对多的关系。为什么要添加第三个 CandyRegion?是不是可以贴多区域糖果和多糖果区域?
标签: c# linq entity-framework