多个WHERE IN子句LINQ等效

时间:2015-05-18 16:07:58

标签: c# 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”是字符串数组。我的“filteredResults”查询应该包含我打算返回的过滤文档。

修改 有些人评论说我不清楚。我正在尝试根据3个字符串数组过滤我的文档。这些字符串数组中的每一个都是“document”对象中的导航属性。在客户端上,用户有三个多选控件,因此每个数组可以有多个元素。现在,他们可以选择三种中的任何一种,并根据需要选择尽可能多的选项。

这就是问题当我编译它时,我收到以下错误:“无法从'System.Linq.IQueryable'转换为'System.Linq.ParallelQuery>”

再次编辑包含错误的图片。它出现在“where selectedSectors.Contains(d.Sectors)”enter image description here

的位置

我查了一下:

运气不好。有没有办法我可以说“根据公司和部门和分析师过滤文件?

1 个答案:

答案 0 :(得分:2)

也许我误解了这个(我不知道你的完整对象模型)但是不会做以下工作......

    var filteredResults = from d in db.Documents
                         where d.Sectors.Exists(sect => filterResearch.SelectedSectors.Contains(sect.Name))
                            && d.Companies.Exists(comp => filterResearch.SelectedCompanies.Contains(comp.Name))
                            && d.Analysts.Exists(anyst => filterResearch.SelectedAnalysts.Contains(anyst.Name))
                        select d;

编辑:要添加,我还没有在Visual Studio中尝试过,因此可能无法编译。也许你需要使用Exists - Any以外的函数 - 但我确信你能得到我正在思考的要点。