sri4dotnet Ответов: 1

Используя лямбда-выражение, невозможно выполнить join, group by и where условие одновременно в ядре entity framework


Привет,

Я пытаюсь сделать join, group by и where condition, используя лямбда-выражение в ядре entity frame core, но не могу вернуть запрос как IQuerayable. Ниже приведен код -

_entities.Company.Join(_entities.Employee,
                             com => com.Company_id,
                             emp => emp.Company_id,
                            (com, emp) => new SearchCompany
                                         {
                                           companyID = com.Company_id,
                                           industryType = com.industry_id,
                                           company = com.Company_name,
                                           location = com.City,
                                           contacts = emp.Employee_phone
                                          })
                             .Where(input => input.company == companyName)
             .GroupBy(c => new { c.companyID, c.industryType, c.company, c.location })
                             .ToListAsync();


SearchCompany-это класс с companyID,industryType,company,location,contacts в качестве строковых свойств, и мне нужно вернуть эти значения.

Пожалуйста, помогите мне решить эту проблему. Заранее спасибо.

Что я уже пробовал:

Я пробовал в google,но не смог найти правильное решение для возврата запроса в IQueryable с помощью join, group by и where conditions combination with lambda expression.

1 Ответов

Рейтинг:
1

F-ES Sitecore

Если вы хотите, чтобы он был IQueryable, то не делайте "ToListAsync" в конце.


sri4dotnet

Тогда его давать ошибку, как не удается преобразовать IQueryabale&ЛТ;igrouping>, Чтобы IQuerayable&ЛТ;searchcompany&ГТ;. SearchCompany - это мой пользовательский класс

F-ES Sitecore

Подумайте о данных, возвращаемых вашей группой. Если ваши данные есть

1, а
2, б
2, с
3, d
3, е
3, f

затем выполнение GroupBy по первому элементу дает вам вложенную структуру, такую как

1
-- ля
2
-- б
-- с
3
-- д
-- ми
-- Ф

У вашей группы есть три "ключевых" элемента (1, 2, 3), и каждый из этих ключей является IEnumerable ваших фактических данных (SearchCompany), так что у вас фактически есть список списков.

Итак, как вы хотите, чтобы эта вложенная структура была преобразована в единый список объектов SearchCompany? А не Толист ты мог бы сделать

.SelectMany(x => x.ToList())

Это даст Вам только объекты SearchCompany, но теперь они больше не вложены, поэтому вы эффективно отбросили groupby, и у вас могут быть дубликаты данных. Если вам нужен единый список элементов SearchComapny, то вам нужно решить, хотите ли вы groupby и не хотите ли вместо него distinct. Или вы можете сделать то же самое, что и выше, и вернуть только сгруппированные данные, но это, вероятно, не даст вам того, что вы хотите.