C#如何将此 tSQL 语句转换 LINQ 在子查询中使用的组

标签: Linq SQLServer C#
发布时间: 2017/2/27 1:49:46
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有我想转换为 LINQ 以下 MSSQL 查询。我使用实体框架使用以下语法来获取数据。

var rv = (from i in DC.TableA select i).ToList();

这是我想要写 C# LINQ 查询的 sql,但我想不通。有人能帮我吗?

select BTO.* 
from TableA BTO 
join 
(
    select eqnum, max(testdate) as testdate  
    from TableA BTO1
    where 
        BTO1.eqnum in ('M0435', 'Z0843') and 
        BTO1.testdate <= '2008-06-01' 
    group by eqnum 
) T1 
on 
    T1.eqnum = BTO.eqnum and 
    T1.testdate = BTO.testdate 
    order by EqNum;

解决方法 1:

我认为还有机会重写查询,但供参考我重写了你 sqllinq 逐字记录。

如果你解释你正在实现我们可以提供替代 sql /linq

var eqnums = new[] { "M0435", "Z0843" };
var testdate = "2008-06-01";

var query = from bto in DC.TableA
            join t1 in (
               from bto1 in DC.TableA
               where eqnums.Contains(bto1.eqnum) &&
                  bto1.testdate.CompareTo(testdate) <= 0
               group bto1 by bto1.eqnum into g
               select new 
               {
                  eqnum = g.Key,
                  testdate  = g.Max(x => x.testdate)
               }
            ) on new { bto.eqnum, bto.testdate } equals new { t1.eqnum, t1.testdate }
            orderby bto.eqnum
            select bto;
官方微信
官方QQ群
31647020