C# 如何将Linq转换为SQL

C# 如何将Linq转换为SQL,c#,sql,linq,C#,Sql,Linq,如何将此SQL查询转换为LINQ select c.Name as 'Name', s.Status from (select *, row_number() over (partition by CustomerID order by Date desc) rn from CustomerStatus) detail inner join Status s on detail.Status =

如何将此SQL查询转换为LINQ

select 
    c.Name as 'Name', s.Status 
from 
    (select 
         *, 
         row_number() over (partition by CustomerID order by Date desc) rn
     from 
         CustomerStatus) detail
inner join 
    Status s on detail.Status = s.Id
inner join
    Customers c on detail.CustomerId = c.Id
where 
    detail.rn = 1
我无法将此SQL转换为linq-我如何才能做到这一点?

尝试(
ctx
是您的数据库上下文):


请不要只是发布SQL并要求转换。至少显示一个类模型,以便导航属性和关联的多样性可见。另外,告诉我们您针对的是哪种类型的LINQ(针对实体?),并展示您自己的第一次努力,以便我们了解您具体需要帮助的地方。最好的LINQ查询几乎从来都不是SQL查询的1:1复制。您的标题是“将LINQ转换为SQL”,但您的问题提供了SQL并表示您希望将其转换为LINQ。请保持标题一致。我同意Gert的观点-您需要在这里尝试一下。@Micheal-这个查询访问数据库的次数是在探查器上看到的3倍。我得到了期望的结果,但问题是这个查询过滤了内存中的数据。有没有其他有效的方法来做到这一点…@ChrisHadfield我认为这不是问题,因为无论如何,数据都将从数据库中获取,并且.NET正在使用连接池,所以不应该有问题。
ctx.CustomerStatus
  .GroupBy(cs => cs.CustomerId)
  .Select(gr => gr.OrderByDescending(cs => cs.Date).First())
  .Join(ctx.Status, cs => cs.Status, st => st.Id, (cs, st) => new {cs.CustomerId, Status = st})
  .Join(ctx.Customers, a => a.CustomerId, c => c.Id, (a, c) => new {a.Status.Status, c.Name});