如何在LINQ

时间:2019-03-11 09:34:09

标签: sql linq model-view-controller

我是MVC的新手,我被深深地吸引住了,因此对可能是一个简单问题的道歉。 我正在尝试将一些SQL转换为LINQ中的等效代码

with myresults as(
 select [useridfrom], [mid], [subject], [msgText], [created], 
 ROW_NUMBER() OVER(PARTITION BY mid ORDER BY created DESC) AS rNumber
 from msg where useridto = @useridto
) 
select * from myresults where rnumber = 1

这是我到目前为止所做的,但是我不知道如何做分区位

var query = from p in db.msgs
join mb in db.members on p.userIDFrom equals mb.userID
where p.userIDTo == userID
orderby p.created descending

1 个答案:

答案 0 :(得分:0)

您需要按mid分组,然后在分组排序中选择第一个。生成的SQL效率可能不如CTE(即,为什么不在存储的proc中使用当前的SQL包装器并从您的应用程序中调用它呢?)。

类似(假设EF和LINQ实体)

var res = await (from m in myContent.Messages
                 group m by m.mid into grp
                 let maxInGrp = (from g in grp
                                 order by g.created descending
                                 select g).FirstOrDefault()                     
                 select maxInGrp
                ).ToListAsync();