2012-06-25 3 views
1

У меня есть следующие две таблицы:Сортировка по количеству дочерних записей с помощью LINQ

-Groups- 
Id 
Name 

-Members- 
Id 
GroupId (Group.Id is related to Member.GroupId) 
Name 
IsActive (bit) 

Как я могу писать запрос LINQ, который будет сортировать по количеству IsActive членов высшего к низшему в группе?

Запрос будет выглядеть как этот

//pseudo code 
    from grp in database.Groups 
    orderby Count(grp.Members.where(m=>m.IsActive == true)) descending 
    select grp 

ответ

3

Вы можете использовать let clause для этого. В результате вы получите следующее:

from grp in database.Groups 
let activeCount = grp.Members.Where(m=>m.IsActive == true).Count() 
order by activeCount descending 
select grp 

Другой способ для того чтобы достигнуть желаемого упорядочения заключается в использовании select ... into. Запросы будут очень похожими, но вы должны знать о различиях между этими двумя подходами: Is linq's let keyword better than its into keyword?

+1

почти получил это право :) – James

Смежные вопросы