Как тиражировать ключевое слово раздела в LINQ - PullRequest
0 голосов
/ 11 марта 2019

Я новичок в 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 голосов
/ 11 марта 2019

Вам нужно сгруппировать по mid, затем в группе сортировки и выбрать первое.Результирующий SQL может быть менее эффективным, чем CTE (т.е. почему бы не использовать текущую оболочку SQL в хранимом процессе и вызывать ее из своего приложения?).

Что-то вроде (это предполагает EF и LINQ to Entities):

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...