Linq EF group, чтобы получать последние записи в список объектов
Я пытаюсь перейти от простого SQL к EF.
Но есть несколько сложных запросов (объединений), которые, похоже, сложно сгенерировать linq для.
Сначала я попытался использовать инструмент sqltolinq для генерации linq, но он дает ошибку, поскольку некоторые из вещей не поддерживаются в запросе.
- Как я могу улучшить производительность этого LINQ?
- Как заставить EF создавать SQL-файл с добавлением строки concat?
- Как объединить 2 таблицы, используя Entity Framework 6 и Linq в проекте MVC?
- Дополнительные подключения к очень простому EF-запросу для отношений 1-1
- sqlfunctions.checksum объекта linq
вот linq:
var entryPoint = (from ep in dbContext.tbl_EntryPoint join e in dbContext.tbl_Entry on ep.EID equals e.EID join t in dbContext.tbl_Title on e.TID equals t.TID where e.OwnerID == user.UID select new { UID = e.OwnerID, TID = e.TID, Title = t.Title, EID = e.EID });
В записи таблицы есть много записей, которые я хотел бы группировать и получать последние для каждой группы. Но тогда мне нужно будет выбрать объект модели представления, который будет привязан к gridview.
Я не знаю, где я могу реализовать логику для группировки и получения последней от каждой и иметь возможность получать значения из таблицы join в объект viewModel.
где-то мне нужно добавить
group entry by new { entry.aID, entry.bCode, entry.Date, entry.FCode } into groups select groups.OrderByDescending(p => p.ID).First()
в приведенном выше linq для получения последней из каждой группы.
- Получать данные из таблицы после объединения на основе нулевого значения объединенной таблицы с использованием LINQ
- Проблемы в LINQ to SQL со строкой содержат Escape seqence Backspace - C #
- Обновление LINQ-To-Sql - проблемы с производительностью
- «Модель» считывает все строки из таблицы при инициализации? (представление)
- Запросы LINQ vs Хранимые процедуры
- Как отображать 5 лучших продуктов определенной категории
- Как использовать DbGeography.Filter в Linq с Entity Framework 5?
- Как выбрать большее число и меньшее число, используя LINQ To SQL в C #
Вы можете вставлять group by
сразу после присоединения:
var query = from ep in dbContext.tbl_EntryPoint join e in dbContext.tbl_Entry on ep.EID equals e.EID join t in dbContext.tbl_Title on e.TID equals t.TID where e.OwnerID == user.UID group new { ep, e, t } by new { e.aID, e.bCode, e.Date, e.FCode } into g let r = g.OrderByDescending(x => xeID).FirstOrDefault() select new { UID = reOwnerID, TID = reTID, Title = rtTitle, EID = reEID };
Трюк здесь состоит в том, чтобы включить то, что вам нужно после группировки между group
и.
Тем не менее, вышесказанное будет переведено в CROSS APPLY
причем все соединения включаются дважды. Если ключ группировки содержит поля только из одной таблицы, было бы лучше сначала выполнить группировку / выбор последнего элемента группировки, а затем присоединиться к результату с остальными:
var query = from e in (from e in dbContext.tbl_Entry where e.OwnerID == user.UID group e by new { e.aID, e.bCode, e.Date, e.FCode } into g select g.OrderByDescending(e => e.ID).FirstOrDefault()) join ep in dbContext.tbl_EntryPoint on e.EID equals ep.EID join t in dbContext.tbl_Title on e.TID equals t.TID select new { UID = e.OwnerID, TID = e.TID, Title = t.Title, EID = e.EID };