将T-SQL转换为Lambda

将T-SQL转换为Lambda,lambda,expression,Lambda,Expression,如何将此查询转换为lambda表达式 SELECT * FROM T1 WHERE T1.a = 21 AND T1.b = 1 AND T1.c = 0 AND (T1.d IN (SELECT T2.a FROM T2 WHERE T2.b = 21 AND T2.c = 10251367

如何将此查询转换为lambda表达式

SELECT *
FROM   T1
WHERE  T1.a = 21
       AND T1.b = 1
       AND T1.c = 0
       AND (T1.d IN (SELECT T2.a
                     FROM   T2
                     WHERE  T2.b = 21
                            AND T2.c = 10251367
                            AND T2.d = 100001000002)
            OR T1.d IN (SELECT (T2.a / 100) * 100
                        FROM   T2
                        WHERE  T2.b = 21
                               AND T2.c = 10251367
                               AND T2.d = 100001000002))

感谢两种不同的方法,一种是linq到sql,另一种是使用扩展方法。 正如Matten指出的那样,
Select t2a
Select(t2.a/100)*100)

下面的所有代码都是伪代码,所以不要剪切和粘贴,希望它能正常工作

Linq到Sql

var firstQuery = (From a in context.T2
                     WHERE a.b == 21 AND a.c == 10251367 AND a.d == 100001000002)   


var final = (FROM foo IN context.T1
             where foo.a == 21 
             AND FOO.B == 1 
             AND FOO.C == 0
             and firstQuery.contains(foo.d)
扩展方法

var firstQuery = context.T2.Select.Where( a => a.b == 21 AND a.c == 10251367 AND a.d == 100001000002 )           

var final = context.T1.Select(y => y).Where ( x= > x. a== 21 && x.b = 1 && x.c == 0 and x.d firstQuery.contains(x.d));

选择(T2.a/100)*100?除此之外,这两个子查询(T1.d IN…)在我看来非常相似。到目前为止你试过什么?没有连接,只有条件。应该很超前!该字段是select for IN OPERATION中的返回值((T2.a/100)*100)。我还建议调用“firstQuery”枚举表上的“.ToList()”或“.ToArray()”,以便在不对数据库执行数据库查询时获得更好的性能,否则可能会多次枚举“firstQuery”。@Matten,这是一个很好的观点,但我相信firstQuery.contains将在数据库服务器上执行。如果具体化查询,所有数据将在我们的应用程序服务器而不是数据库服务器上解析。我希望执行块中的所有命令,并通过查询返回结果。应以示例T-SQL中提到的两种形式查看表T2Complete@mohammed,我生成的查询在逻辑上等同于您的查询。您的子查询是相同的。他们计算出来的是`和(X=Y或X=Y)`。你能解释一下你的分项有什么不同吗?