質問
私は正常に動作し、いくつかのLINQのコードを、持っています。これは、最新の順ボードの記事のリストを取得します。
ここでの漁獲量は、それが最も最近のコメントによって順序付け... のことでの順です。掲示板投稿がちょうどコメントを得たのであれば、それは(すなわち。最も最近の)リストの最上部までとなります。
素晴らしい!...しかし、何先ほど作成しまった新しいボードの投稿についてはどうですか?彼らはNOコメントを持っていないので、彼らはの順序を言いたいみたいだ..しかし、uは何のコメントを持っていない場合は、そのあなたの掲示板投稿日付を作成:(ボトムダウンリストされています>」。
ここの私のLINQ ...
boardPostList = (from bp in db.tblBoardPosts.Where(whereClause)
orderby (from bc in bp.tblBoardComments
orderby bc.DateModified descending
select bc.DateModified).First() descending
select bp).ToPagedList(pageNumber, numberOfResults);
誰もが何か提案がありますか?
解決
コメントがそれに掲載されるたびに、あなたがtblBoardPosts
でフィールドを更新することはできません何らかの理由はありますか?その後、あなたはののシンプルなクエリ多くの、そして何をすべきか動作するように、システム内のすべてのコメントをスキャンする必要がないものを持っている、「掲示または最後のコメント」日付を保管してください。
DateModified
フィールドがNULL可能である場合は、、、このクエリのの仕事かもしれないと言いました
boardPostList = (from bp in db.tblBoardPosts.Where(whereClause)
orderby ((from bc in bp.tblBoardComments
orderby bc.DateModified descending
select bc.DateModified).FirstOrDefault() ?? bp.DateModified) descending
select bp).ToPagedList(pageNumber, numberOfResults);
それだけでまっすぐDateTime
列の場合は、FirstOrDefault
の結果はまだ非NULL可能になりDateTime
です...あなたが試すことができます:
boardPostList = (from bp in db.tblBoardPosts.Where(whereClause)
let lastComment = bp.tblBoardComments
.OrderByDescending(bc => bc.DateModified)
.FirstOrDefault()
let lastModified = (lastComment == null
? bp.DateModified
: lastComment.DateModified)
orderby lastModified descending
select bp).ToPagedList(pageNumber, numberOfResults);
これは、しかし、かなり恐ろしいだし、適切にSQLに変換しない場合があります。私は確かにポスト自体がそれを追跡する仕組みに変更しようとします。
所属していません StackOverflow