C# 实体框架-复杂连接到多个表中,根据表2上的条件返回表1

C# 实体框架-复杂连接到多个表中,根据表2上的条件返回表1,c#,entity-framework,linq,expression,C#,Entity Framework,Linq,Expression,我已经有了一些功能性的东西,但我正试图进一步抽象它。现在,我唯一能做到这一点的方法是通过Linq的SQL语法。作为我的意思的一个例子: query = from t1 in query join t2 in joinedTable on t1.JoinProperty equals t2.JoinProperty where t1.FilterProperty > t2.FilterProperty select t1; 现在,我要做的是抽象选择“t1.JoinProperty”,因为这

我已经有了一些功能性的东西,但我正试图进一步抽象它。现在,我唯一能做到这一点的方法是通过Linq的SQL语法。作为我的意思的一个例子:

query = from t1 in query
join t2 in joinedTable on t1.JoinProperty equals t2.JoinProperty
where t1.FilterProperty > t2.FilterProperty
select t1;
现在,我要做的是抽象选择“t1.JoinProperty”,因为这个连接结构的其余部分对于我系统中的所有内容都是相同的。我知道使用.Join方法,抽象它会很简单:

<Expression<Func<<t1Type, joinPropertyType>>> abstractedSelector = (t1 => t1.JoinProperty);
query.Join(joinedTable, abstractedSelector, joinedTable.JoinProperty, (t1, t2) => /*something*/);
t1.JoinProperty);
Join(joinedTable,abstractedSelector,joinedTable.JoinProperty,(t1,t2)=>/*something*/);
问题在于“where”条款。使用这种语法,如何在t1和t2上保留句柄,以便在不枚举结果的情况下进一步过滤相关属性?我知道我可以使用“(t1,t2)=>new{t1=t1,t2=t2}”,但我的理解是,将实体放到像这样的对象上会枚举数据

Join方法上是否有重写,或者可以让我做我想做的事情?或者是否有某种方法可以将抽象属性选择转换为LINQSQL语法


编辑:通过一些测试,.Join函数中的匿名类型似乎没有像我预期的那样枚举数据。使用这个,看起来我可以完成我想完成的事情。不过,如果有类似的LINQSQL语法解决方案,我还是希望看到它

您有权访问数据库来创建视图吗?我有,但最终它是一个相对简单的SQL查询,需要应用到系统中的几乎每个实体,唯一的区别是对连接属性的选择。我们当前的方法是为每个查询创建存储过程来执行此逻辑,但这会带来大量开销,而且通常会很混乱。视图可能会更糟,依我看。这就是为什么我试图分离出一个差异并概括所有其他内容,我已经证明EF能够生成我想要的查询。你必须使用.Join函数,还是可以使用导航属性?目前,没有导航属性,直接做一个是不可行的。如果有什么问题的话,我得去“t1.P.T2”。即便如此,它也不能解决抽象问题,我希望一般定义“t1-->??-->P”,并能够将此定义放在一个通用结构中,该结构将在每个资源上一致地应用过滤。我认为您不能使用LINQ查询(理解)语法来实现这一点,必须使用LINQ方法(lambda)语法。