2014-01-25 4 views
0

(Linq)Linq новейшая группа записей

У меня есть простой объект, давайте называть собаку в простом Список Собака

Dog 
    Id (Unique) 
    GroupBarkId 
    Name 

мне нужно, чтобы получить все собаки, которые имеют тот же самый высокий GroupBarkId

Id GroupdBarkId 
1 2 
2 2 
3 2 
4 3 
5 3 
6 3 

Так мне нужен список, чтобы в этом случае GroupBarkId равен 3.

Я не знаю, самый высокий GroupBarkId, когда я делаю запрос

+0

Люди сегодня на безумном голосе. Должна быть плохая пятница. Вопрос читается, отформатирован и четко объясняется, что он хотел сделать. – TyCobb

+1

Но не хватает исследований, кода и реальной точки, где OP застрял. Так что это не вопрос. Просто * напишите мне для меня * –

+0

@ L.B Вы только что описали большинство «хороших» вопросов Stack Overflow. =) – TyCobb

ответ

2
var dogs = db.Dogs.Where(d => d.GroupdBarkId == db.Dogs.Max(d => d.GroupdBarkId)) 
        .ToList(); 

Или сначала получить максимальное Id:

var id = db.Dogs.Max(d => d.GroupdBarkId); 
var dogs = db.Dogs.Where(d => d.GroupdBarkId == id) 
        .ToList(); 
+0

Первый подход - настоящий хит производительности. Второй хороший –

2

Вы можете использовать Enumerable.GroupBy + OrderByDescending:

List<Dog> dogsWithHighestGroupBarkId = dogs 
    .GroupBy(d => d.GroupBarkId) 
    .OrderByDescending(grp => grp.Key) 
    .First() 
    .ToList() 
+0

Это лучше, чем делать подзапросы для каждого элемента в коллекции. Кстати, я считаю, что лучший способ с точки зрения производительности будет делать два отдельных запроса - один для получения максимального id, а второй для фильтрации collectciton –