2017-09-14 9 views
0

このクエリを簡略化する可能性はありますか? Entity Frameworkを使用していて、このDRY違反を見ると私の目は泣いています。データベースには、フォーラムプロジェクトの典型的なテーブルがいくつかあります:ユーザ、投稿、トピック、カテゴリ - これらはすべて適切なナビゲーションプロパティです。GroupByメソッドでLINQクエリを簡略化

GetMostActiveTopicByUserIDは、特定のユーザ(最もアクティブなもの=すべてのユーザのトピックから最も多く送信された投稿)に対して最もアクティブなトピックを返します。

ActiveTopicDTO GetMostActiveTopicByUserID(int id) 
{ 
    var result = _databaseContext.Users.Where(q => q.ID == id) 
    .Select(user => new UserMostActiveTopicDTO() 
    { 
     TopicName = user.Posts.GroupBy(post => post.Topic.ID) 
        .OrderByDescending(post => post.Count()) 
        .FirstOrDefault() 
        .FirstOrDefault() 
        .Topic.Name, 

     TopicAlias = user.Posts.GroupBy(post => post.Topic.ID) 
        .OrderByDescending(post => post.Count()) 
        .FirstOrDefault() 
        .FirstOrDefault() 
        .Topic.Alias, 

     TopicCategoryDescription = user.Posts.GroupBy(post => post.Topic.ID) 
        .OrderByDescending(post => post.Count()) 
        .FirstOrDefault() 
        .FirstOrDefault() 
        .Topic.Description 

     //and so on... 
    }).Single(); 

    return result; 
} 
+0

は、なぜあなたは呼んでください、あなたのオブジェクトを 'FirstOrDefault()を構築することができ、1つのグループを行うと、以下のような結果を返してください。FirstOrDefault()'? – maccettura

+0

なぜ全体ではなく 'user.Posts.GroupBy(ポスト=> post.Topic.ID) .OrderByDescending(ポスト=> post.Count())を入れ .FirstOrDefault() .FirstOrDefault() .Topic'一部メソッドの内部?次に、 'TopicName = NewMethod()。Name'、' TopicAlias = NewMethod()。Alias'などを実行します。 – Sach

+0

@Galcettura:GroupByはIEnumerable を返すので - 最初の要素を最初の最大のグループから取得します。これは、特定のユーザーの投稿数が最も多いトピックに相当します。少し奇妙ですが、私はそれをもっときれいに書く方法は考えていません。 – user132435465

答えて

1

完全なグループはTopic.IDに基づいており、何度も繰り返しグループ化する必要はありません。

CHANGE_TYPE_TO_TYPE_OF_RETURN-TYPE GetMostActiveTopicByUserID(int id) 
{ 
    return _databaseContext.Users 
     .Where(q => q.ID == id) 
     .Select(user => 
     { 
      user.Posts.GroupBy(post => post.Topic.ID) 
       .OrderByDescending(post => post.Count()) 
       .FirstOrDefault() 
     }) 
     .Single(); 
} 

は、次に返される結果から、あなたは

+0

これはまさに私が欲しかったものです。ありがとうございました。 – user132435465