LINQ Grouping: выбрать строку вместо ключа? - PullRequest
1 голос
/ 26 июля 2010

Я, вероятно, не смогу объяснить это достаточно хорошо, но здесь все идет ...

У меня есть таблица, подобная этой:

Id | Foreign_Key_Id | A_Number | Some_Other_Info
1      1                100          Red
2      1                200          Blue
3      1                300          Orange
4      2                100          Green
5      2                200          Yellow
6      3                100          Brown

Я хочу получитьмаксимальное «A_Number» для определенного «Foreign_Key_Id» в этой таблице, но также возвращает остальную часть записи, поэтому у меня есть информация из столбца «Some_Other_Info».

Я обнаружил, что могу сделать это череззапрос, подобный следующему:

from x in This_Table
group x by x.Foreign_Key_Id into g
orderby g.Max(x => x.A_Number) descending
select g.Where (x => x.Foreign_Key_Id == g.Key).OrderByDescending (x => x.A_Number).First()

Редактировать: Или, возможно, этот более краткий запрос:

from x in This_Table
group x by x.Foreign_Key_Id into g
let maxANumber = g.Max(x => x.A_Number)
orderby maxANumber descending
select g.Where(x => x.A_Number == maxANumber).First()

Хотя я не совсем уверен, какая запись будет выполняться, если один Foreign_Key_Id имел две записито же самое значение "A_Number" (которое возможно в таблице, на которую я ссылаюсь, мне просто нужно взять самое последнее).

Которое в моем примере, я считаю, вернет:

Id | Foreign_Key_Id | A_Number | Some_Other_Info
3      1                300          Orange
5      2                200          Yellow
6      3                100          Brown

Кажется, должен быть способ сделать это более простым способом (который делает запрос быстрее, чем тот, который я придумал), я просто не могу понять, как.

Заранее спасибо.

1 Ответ

1 голос
/ 26 июля 2010

Следующее также работает.Вы можете заказать внутри группы:

from x in This_Table
group x by x.Foreign_Key_Id into g
select g.OrderByDescending(y => y.A_Number).First();

Чтобы взять самую последнюю запись, когда A_Number s равны, просто добавить еще один OrderBy к запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...