使用subselect上的连接将sql查询转换为linq语句

时间:2015-05-12 05:25:37

标签: mysql linq

我正在尝试将以下sql查询转换为LINQ语句

SKTransition.fadeWidthColor

LINQ声明

SELECT t.*
FROM    (
        SELECT Unique_Id, MAX(Version) mversion
        FROM    test
        GROUP BY Unique_Id
    ) m INNER JOIN
    test t  ON m.Unique_Id = t.Unique_Id AND m.mversion = t.Version

我收到了where子句的错误。请帮忙

Test::Mojo::Role::Phantom

1 个答案:

答案 0 :(得分:1)

这不是一个简单的直接转换,但您可以使用linq方法语法完成相同的操作。第一个查询将执行到表达式树,然后您将从CS.alerts的分组中加入该表达式树。这将CS.test查询中的表达式树组合到CS.alerts的表达式树中,以连接两个表达式树。

评估表达式树以构建查询并在枚举时执行所述查询。在这种情况下,枚举是ToList()调用,但从枚举中获取结果的任何内容都将执行查询。

var query1 = CS.test.GroupBy(x => x.Unique_Id);
var joinResult = CS.alerts.Join(query1, 
   alert => new { ID = alert.Unique_Id, Version = alert.Version },
   test => new { ID = test.Key, Version = test.Max(y => y.Version }, 
   (alert, test) => new ABCBE { 
      ABCName = alert.Name, 
      number = alert.Number, 
      Unique_Id = test.Key, 
      Version = test.Max(y => y.Version)
    }).ToList();

因为query1仍然是IQueryable并且您正在使用CS.alerts(我猜测CS是您的数据上下文),它应该加入并构建查询以在ToList()枚举上执行。