두 세트가 있습니다. 사탕과 지역. 각각의 캔디에는 캔디가 특정 지역 (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; }
}
두 세트가 있음을 언급합니다. 코드 스 니펫에 의해 캔디 객체에는 캔디 영역의 컬렉션이 포함되어 있습니까? 이 경우 기술적으로 두 개의 개별 콜렉션이 아닌 콜렉션을 포함하는 오브젝트가 있습니다. 이는 어떤 종류의 조인 절이 필요함을 의미합니다. –
@JamesShaw 예, CandyRegion은 Candy 및 Region의 모음입니다. 지역은 두 번째 세트가됩니다. 사탕과 지역은 CandyRegion에 의해 결합됩니다. –
@DamonPollard 문제의 캔디 및 지역 수업을 게시해야한다고 생각합니다. 그것은 혼란을 만듭니다. –