Linq EF group, чтобы получать последние записи в список объектов

Я пытаюсь перейти от простого SQL к EF.

Но есть несколько сложных запросов (объединений), которые, похоже, сложно сгенерировать linq для.

Сначала я попытался использовать инструмент sqltolinq для генерации 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 для получения последней из каждой группы.

Вы можете вставлять 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 }; 
  • 'let' в выражении Linq генерирует Cross Join
  • Как предотвратить вставку новых записей в таблицы при использовании Linq и SQL?
  • Вставка Linq в поле первичного ключа, которое является автосинхронизирующим
  • БАЗОВАЯ БАЗА ДАННЫХ ASP.NET LINQ
  • SQL RANDOM ORDER BY ON JOINED TABLE
  • Linq DELETE генерирует запрос UPDATE на SQL-сервере
  • Выражение SQL в LINQ
  • Строить, где предложение из массивов строк, используя ключевое слово contains в SQl Server
  • LINQ и параллельный вопрос
  • EF ToTraceString SQL столбцы результатов генерации SQL
  • Эмуляция функции SQL Window 2012 с функцией LINQ
  • Interesting Posts

    Извлечь адрес электронной почты из строки с помощью tsql

    Не удалось выполнить миграцию базы данных из SonarQube 5.6.1 LTS to 6.0

    Как запросить конкретные права доступа пользователей

    Получить список пользователей баз данных и его / ее прав прямо из SQL Server

    SQL Server 100% Использование ЦП – одна база данных показывает высокую загрузку процессора, чем другие

    Более эффективный SQL-запрос

    Количество записей, возвращаемых каждой группой,

    Любые решения для тестирования SQL Agent Job немедленно игнорировать расписание

    Как написать функцию any-number-of-params в SQL Server

    Есть ли способ получить имена полей таблицы, созданной в функции / хранимой процедуре?

    Общее количество месяцев (количество) между 2 датами

    Производительность INNER JOIN зависит от порядка таблиц?

    Пакет SSIS, не требующий получения метаданных временной таблицы

    Как изменить порядок записей (столбец SortOrder) после удаления записи в SQL Server?

    SQL Server – использование интеграции CLR для использования веб-службы

    Давайте будем гением компьютера.