質問

私は正常に動作し、いくつかの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に変換しない場合があります。私は確かにポスト自体がそれを追跡する仕組みに変更しようとします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top