1

最後のコメントの日付または投稿の日付で投稿のリストを並べ替えたいと思います。

これはクラスです:

public class Post
{    
    public int Id { get; set; }
    public string Text { get; set; }
    public System.DateTime DatePosted { get; set; }
    public ICollection<Comment> Comments { get; set; }
}

public partial class Comment
{
    public int Id { get; set; }
    public int PostId { get; set; }
    public string Text { get; set; }
    public System.DateTime DateCommented { get; set; }
}

理想的なコード (コンパイルさえしない) は次のようになります。

IEnumerable <Post> posts = MVPMetroEntities.Posts
                                               .OrderByDescending(p => 
                                                       p.DatePosted || p.Comments.Max(c=>c.DateCommented));

何か案は ?ありがとう

4

4 に答える 4

2

あなたが探していると思いますThenByDescending

IEnumerable<Post> posts = MVPMetroEntities.Posts
    .OrderByDescending(p => p.DatePosted)
    .ThenByDescending(p => p.Comments.Max(c => c.DateCommented));
于 2013-01-18T11:16:56.183 に答える
1
var posts = MVPMetroEntities.Posts
                .Select(p => new { 
                     Date = p.Comments.Any() 
                                ? p.Comments.OrderByDescending(c => c.DateCommented).First().Date 
                                : p.DatePosted, 
                     Post = p
                  }
                .OrderByDescending(x => x.Date);
于 2013-01-18T11:29:03.227 に答える
0

意図がよくわかりませんでしたが、これはどうですか?

MVPMetroEntities.Posts
.OrderByDescending(p => Recent(p.DatePosted, p.Comments.Max(c => c.DateCommented)));

このようなヘルパーメソッド/拡張メソッドを使用して

        public DateTime Recent(DateTime dt1, DateTime dt2)
        {
            return dt1 > dt2 ? dt1 : dt2;
        }

注: Linq-to-sql などの ORM を使用している場合、ヘルパーが機能しない可能性があります

于 2013-01-18T11:26:08.490 に答える
0

OrderByDescending で三項演算子を使用して、答えを見つけました。ありがとう :)

MVPMetroEntities.Posts
            .OrderByDescending(
                    e => e.Comments.Any() ? e.Comments.Max(f => f.DateCommented) : e.DatePosted)
于 2013-01-18T13:05:37.457 に答える