sri4dotnet Ответов: 1

Невозможно преобразовать SQL-запрос в linq, который имеет условия join, group by и where


Я не могу преобразовать sql-запрос в выражение lamba в ядре entity framework. ниже приведен sql-запрос -

select c.company_id,industry_id,company_name,city,count(first_name) "Count" from company c join employee e on c.Company_id = e.Company_id where c.Company_name in ('"15 Minutes" Inc.', '!mpactMEDIA','"Stuffed" Cajun Meat Market & Specialty Food Store' ) group by c.company_id,industry_id,Company_name,city


Мне нужно выбрать только несколько столбцов из обеих таблиц.
пожалуйста, помогите мне написать выражение Ламбы.

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

Я попробовал как ниже упомянутый код его не работает

_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.First_name.Count()
                            })
                           .Where(input => input.company == sb.ToString())
      .GroupBy(c => new { c.companyID, c.industryType, c.company, c.location });



У меня лицо(Поиск), которая companyID,industryType,компании,местонахождение компании,контакты, как членов организации. Я возвращаю значение запроса linq в IQuerayable<search>. Я получаю ошибку, так как не могу конвертировать в IQuerayable<search> из IQueryable<Igrouping< anonymous>>;

1 Ответов

Рейтинг:
0

Maciej Los

Я бы сделал это вот так:

string[] companies = {"'15 Minutes' Inc.", "!mpactMEDIA", "'Stuffed' Cajun Meat Market & Specialty Food Store"};
var result = _entities.Company
    .Where(com=>companies.Contains(com.Company_name))
    .Select(com=> new SearchCompany
    {
        companyID = com.Company_id,
        industryType = com.industry_id,
        company = com.Company_name,
        location = com.City,
        contacts = _entities.Employee.Where(e=>e.Company_id==com.Company_id).Count()
    });


[Править]спасибо Ричард Диминг[^] за ценные предложения по улучшению кода.[/РЕДАКТИРОВАТЬ]


Richard Deeming

Основываясь на исходном запросе, я не думаю, что вам это нужно. y=>y.Contains часть. Запрос OP ищет точное совпадение по названию компании, так что:

.Where(com => companies.Contains(com.Company_name))

Maciej Los

Хорошее улучшение!
- Спасибо, Ричард.