我是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
答案 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();