У меня есть веб-страница, на которой пользователь может ограничить результаты на основе трех разных вариантов выбора нескольких вариантов (см. Прилагаемое изображение).Несколько предложение WHERE IN LINQ эквивалент
Немного фона. Документы имеют много секторов, компаний и аналитиков, назначенных им. У моих объектов EF есть свойства навигации, что означает, что мне не нужно писать явные JOINS, чтобы получить нужные мне данные.
Моя проблема: я не могу построить запрос LINQ, который мне нужен, чтобы получить нужные мне результаты. Использование SQL было бы простым, и я мог бы легко использовать комбинацию JOINS и WHERE IN ('Blah', 'Another blah'). В моем контроллере у меня есть следующий код:
public JsonResult FilterResearch(FilterResearchModel filterResearch)
{
var db = new Context();
// home model
var model = new HomeModel();
var selectedSectors = from s in db.Sectors
where filterResearch.SelectedSectors.Contains(s.Name)
select s;
var selectedCompanies = from c in db.Companies
where filterResearch.SelectedCompanies.Contains(c.Name)
select c;
var selectedAnalysts = from a in db.Analysts
where filterResearch.SelectedAnalysts.Contains(a.Name)
select a;
var filteredResults = from d in db.Documents
where selectedSectors.Contains(d.Sectors)
select d;
FilterResearch.Selected «Something» строковые массивы. Мой запрос «filterResults» - это то, что должно содержать отфильтрованные документы, которые я планирую вернуть.
EDIT Некоторые люди прокомментировали тот факт, что я не понимаю. Я пытаюсь отфильтровать мои документы на основе 3 строковых массивов. Каждый из этих строковых массивов является свойствами навигации в объекте «document». На клиенте у пользователя есть три элемента управления с несколькими элементами, поэтому каждый массив может иметь более одного элемента. Теперь они могут выбрать любой из трех и выбрать столько вариантов, сколько пожелают.
ЭТО ПРОБЛЕМА Когда я скомпилировать я получаю следующее сообщение об ошибке: «не удается преобразовать из„System.Linq.IQueryable“до«System.Linq.ParallelQuery>»
EDIT СНОВА Изображение ошибка включена. Это происходит на "где selectedSectors.Contains (d.Sectors)"
Я проверил:
- Convert SQL to LINQ to Entities WHERE IN clause
- LINQ to Entities - Where IN clause in query [duplicate]
- Where IN clause in LINQ [duplicate]
с немного удачи. Есть ли способ, по которому я могу просто сказать «отфильтровать документы на основе компаний И-секторов и аналитиков?
Вы не показали нам, что вы на самом деле делаете с этими запросами, где ваша проблема явно лежит. – Servy
Вы ищете '.Where (o => o.Companies.Contains (" ... ") && o.Sectors.Contains (" ... ") || o.Analyst.Contains (" ... ")) '? Не уверен, что именно вы передаете. – Greg
@ Серви Действительно? Запрос «filterResult», в результате которого произошла ошибка, означает, что я не показывал, что я «делаю»? –