Я, вероятно, не смогу объяснить это достаточно хорошо, но здесь все идет ...
У меня есть таблица, подобная этой:
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
Кажется, должен быть способ сделать это более простым способом (который делает запрос быстрее, чем тот, который я придумал), я просто не могу понять, как.
Заранее спасибо.