Я застрял с моим запросом.Может быть, кто-нибудь может мне помочь?У меня есть таблица с сообщениями и еще одна с получателями (1: N).Первоначально у меня был следующий запрос:
var messages =
(from message in query
from receiver in message.ReceiverList
where ... // some message and receiver checks
select new { Message = message, Receiver = receiver }
).GroupBy(m => m.Message);
, который работал нормально и возвращал сообщения, каждое со списком получателей.В запросе SQL не было GROUP BY
.
Теперь мне нужно принять только первые 5 сообщений и независимо от того, как я пишу запрос, он терпит неудачу.Я попытался добавить OrderBy
и Take
к этому как этот
var messages =
(from message in query
from receiver in message.ReceiverList
where ... // some message and receiver checks
select new { Message = message, Receiver = receiver }
).GroupBy(m => m.Message).OrderBy(x => x.Key.Id).Take(5);
, но затем это не удалось из-за "Метод или операция не реализована".
Я также пытался написать order by
до select
, а затем он потерпел неудачу из-за GroupBy
, так как он был переведен как
TOP 5 ... FROM ... WHERE ...
GROUP BY message.ID
ORDER BY message.ID ASC
Я даже попробовал довольно плохоищет вариант фильтрации получателей дважды:
var messages = query
.Where(<message conditions> &&
message.ReceiverList.Any(<receiver conditions>)
.Select(message => new
{
Message = message,
Receivers = message.ReceiverList
.Where(<receiver conditions>)
})
.Where(message => message.Receivers.Count() > 0)
.OrderBy(message => message.Message.Id)
.Take(5)
.ToList();
Но это возвращает только первые пять строк таблицы, а мне нужны первые 5 сообщений со всеми их получателями.
Что быбыть правильным способом просто принять 5 сообщений?