私はビューモデル(下記)を持っています。コレクションをメモリにソートせずにビューモデルを作成する方法
public class TopicsViewModel
{
public Topic Topic { get; set; }
public Reply LastReply { get; set; }
}
私は私のIQueryable<Topic>
収集とIQueryable<Reply>
コレクションからの値でIQueryable<TopicsViewModel>
を移入します。私はそのトピックの最後の返信だけを必要とし、Topic.Replies.Last()を実行することで、エンティティコレクション全体をメモリにロードしてから、最後に返されたエンティティコレクションを取得するので、添付されたエンティティコレクション(Topic.Replies)リスト。私はクエリがデータベース内で実行されるようにIQueryableにとどまっています。
私はまた、IQueryable<Topic>
をループすると遅延読み込みが開始されるため、トピックとクエリreplyRepository.Repliesをforeachしたくありません。私は1つの表現を作成し、すべての脚の作業を下層で行うことを好むでしょう。
私は次があります。
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を作成してデータベースと検索トピックとそのトピックの最後の返信をクエリできるようにするためのアイディアですか?私はその話題に関連したすべての返答を避けるために本当に頑張っています。私は最後の返事をつかみたいだけです。
提供していただきありがとうございます。
トピックと返信の間にナビゲーションプロパティがありますか? –
はい、それは私が話した添付エンティティコレクションです。しかし、私はそのナビゲーションプロパティにアクセスしてそのコレクション全体の遅延読み込みをトリガしたくありません。そのコレクション内のすべてのアイテムが必要な場合はそれが意味をなさきますが、コレクション内の最後のアイテムだけが必要なので、何とかIQueryableに残る方がよいでしょう。 – Chev
「動作していません」と言うと、正確にどの部分が動作していないのですか?実行時例外、何も返されない、またはすべてが返されます..? –