Получение строк из одной таблицы и последней 1 строки из связанной таблицы в LINQ - PullRequest
0 голосов
/ 17 августа 2010

Этот вопрос похож на этот:

LINQ to SQL: GroupBy () и Max (), чтобы получить объект с самой поздней датой

Но у меня есть таблица, из которой я хочу вернуть много строк. Его первичный ключ используется как внешний ключ во второй таблице. Для каждой строки, возвращаемой из первой строки, я также хочу вернуть (в том же наборе результатов) самую последнюю (в данном случае упорядоченную по полю даты и времени) 1 строку.

Как это будет построено в LINQ с использованием C #?

Лучшее, что у меня есть:

    var instances = from i in ContextDB.Instances
                    join p in ContextDB.Points on i.InstanceID equals p.InstanceID
                    where categoryIDs.Contains(j.CategoryID)
                    group p by p.InstanceID into latestPoint
                    select new latestPoint.OrderBy(i => i.Instance.Title).FirstOrDefault();

Но это явно неправильно. Хотя я думаю, что правильно понимаю group, я не думаю, что правильно понимаю into.

[РЕДАКТИРОВАТЬ] Чтобы избежать путаницы, я думаю, что этот вопрос можно сформулировать как «Как сделать строки из одной таблицы вместе с последней 1 строкой для каждой из другой таблицы?»

1 Ответ

1 голос
/ 17 августа 2010

Как насчет:

var instances = from i in ContextDB.Instances
                where i.CategoryInstances.Any(categoryIDs.Contains(ci => ci.CategoryID))
                select new
                {
                    Instance = i,
                    LatestPoint = i.Points.OrderBy(i => i.Instance.Title).FirstOrDefault()
                };

Обратите внимание, что я могу удалить большую избыточность на , используя ассоциации вместо объединения .

...