У меня есть вид модели (ниже).
public class TopicsViewModel
{
public Topic Topic { get; set; }
public Reply LastReply { get; set; }
}
Я хочу заполнить IQueryable<TopicsViewModel>
значениями из моей коллекции IQueryable<Topic>
и IQueryable<Reply>
. Я не хочу использовать присоединенную коллекцию сущностей (т.е. Topic.Replies), потому что мне нужен только последний ответ для этой темы и выполнение Topic.Replies.Last () загружает всю коллекцию сущностей в память, а затем захватывает последнюю в список. Я пытаюсь остаться в IQueryable, чтобы запрос выполнялся в базе данных.
Я также не хочу разбираться в темах и запрашивать responseRepository.Replies, поскольку циклическое выполнение IQueryable<Topic>
запускает отложенную загрузку. Я бы предпочел построить одно выражение и сделать всю работу ног на нижних уровнях.
У меня есть следующее:
IQueryable<TopicsViewModel> topicsViewModel = from x in topicRepository.Topics
from y in replyRepository.Replies
where y.TopicID == x.TopicID
orderby y.PostedDate ascending
select new TopicsViewModel { Topic = x, LastReply = y };
Но это не работает. Любые идеи, как я могу заполнить IQueryable или IEnumerable TopicsViewModel так, чтобы он запрашивал базу данных и захватывал темы и последний ответ этой темы? Я очень стараюсь, чтобы не получить все ответы, связанные с этой темой. Я только хочу получить последний ответ.
Спасибо за любые идеи, которые вы можете предложить.