C# 动态查询创建(动态搜索引擎)

C# 动态查询创建(动态搜索引擎),c#,asp.net-mvc-3,iqueryable,entity-framework-4.3,dynamicquery,C#,Asp.net Mvc 3,Iqueryable,Entity Framework 4.3,Dynamicquery,我们正在使用ASP.NETMVC3、EF4.3.1和DynamicQuery库 我们目前正在开发一个动态搜索引擎,可以对多个数据库执行搜索查询 因此,我们有一个允许用户创建查询的界面。 界面如下所示: 因此,在此之后,我们在控制器内重新创建组/子句的层次结构,然后我们必须在不同的表之间执行一些连接,例如:Study/People 问题是,当我们执行连接时,我们按如下方式执行: if (queries.ContainsKey("Drug")) { query = query.Join(Ge

我们正在使用ASP.NETMVC3、EF4.3.1和DynamicQuery库 我们目前正在开发一个动态搜索引擎,可以对多个数据库执行搜索查询

因此,我们有一个允许用户创建查询的界面。 界面如下所示:

因此,在此之后,我们在控制器内重新创建组/子句的层次结构,然后我们必须在不同的表之间执行一些连接,例如:Study/People

问题是,当我们执行连接时,我们按如下方式执行:

if (queries.ContainsKey("Drug"))
{
    query = query.Join(GetContext().StudyDrugs, s => s, sd => sd.StudyId, (s, sd) => new { Study = s, StudyDrug = sd })
                 .Join((IQueryable<int>)queries["Drug"], obj => obj.StudyDrug.DrugId, d => d, (obj, d) => obj.Study);
}

我认为您应该将谓词与它们应用于的集合相匹配。如果它是一个已加入的集合:.JoinIQueryablequeries[Drug].Where…,obj=>…问题是已经添加了组,因为有时我们必须在SQL中使用括号对Where子句进行分组。例如:X&&Y或Z可以有不同的含义:X&&Y或Z或X&&Y或Z。。。这就是为什么where子句应该只在结尾应用,但我不知道如何应用。它在结尾应用是什么意思?你不能多次解析这些组来构建where子句吗?如果你不在最后一次全部应用它们,你就不能确定where子句是否反映了用户真正输入的内容请参见pic,因为独立应用where并不能让你在sql中生成带括号的where子句。我确实可以多次解析这些组,但这是完全无用的,因为我只需要一个大where子句就可以正确地将其应用于and`or。事实上,我需要生成连接,一旦创建了连接,我就可以应用where子句。
SELECT * FROM Table1 T1
JOIN Table2 T2 on (T1.T2Key = T2.Key)