У меня есть модель представления (см. Ниже).Как создать модель представления без сортировки коллекций в памяти
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, чтобы запрос выполнялся в базе данных.
Я также не хочу, чтобы пропустить через темы и запрос replyRepository.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 из ThreadViewModel, чтобы он запрашивал базу данных и захватывал темы и последний ответ этой темы? Я очень стараюсь избежать захвата всех ответов, связанных с этой темой. Я хочу только получить последний ответ.
Благодарим за понимание, которое вы можете предложить.
Есть ли свойство навигации между темами и ответами? –
Да, это была прикрепленная сущность, о которой я говорил. Однако я не хочу получать доступ к этому навигационному свойству и запускать ленивую загрузку всей коллекции. Если бы мне нужны все элементы в этой коллекции, тогда это имело бы смысл, но поскольку мне нужен только последний элемент в этой коллекции, было бы лучше как-то остаться в IQueryable. – Chev
Когда вы говорите «не работает», какая именно часть не работает? Исключение времени выполнения, ничего не возвращено, или все вернулось.? –