2016-10-24 4 views
-1

は、私はあなたが見ることができるように選択selectでスイッチ内のコードの重複を減らしますか?

switch (sorting) 
      { 
       case "newest": 
       { 
         var userId = User.Identity.GetUserId(); 
         var model = db.Posts.Include(p => p.Vote) 
          .OrderByDescending(p => p.PostId).ToList() 
          .Select(p => new ListPostsViewModel 
          { 
           UserVotedUpOnPost = p.Vote.Any(u => u.ApplicationUserID == userId && u.PostVote == 1), 
           UserVotedDownOnPost = p.Vote.Any(u => u.ApplicationUserID == userId && u.PostVote == -1), 
           PostId = p.PostId.ToString(), 
           TimeAgo = ToRelativeDate(p.MessageDate), 
           Message = p.Message, 
           TotalVotes = p.Vote.Sum(v => v.PostVote) 
          }).ToList(); 
        return View("Index", model); 

       } break; 

       case "oldest": 
        { 
         var userId = User.Identity.GetUserId(); 
         var model = db.Posts.Include(p => p.Vote) 
          .OrderBy(p => p.PostId).ToList() 
          .Select(p => new ListPostsViewModel 
          { 
           UserVotedUpOnPost = p.Vote.Any(u => u.ApplicationUserID == userId && u.PostVote == 1), 
           UserVotedDownOnPost = p.Vote.Any(u => u.ApplicationUserID == userId && u.PostVote == -1), 
           PostId = p.PostId.ToString(), 
           TimeAgo = ToRelativeDate(p.MessageDate), 
           Message = p.Message, 
           TotalVotes = p.Vote.Sum(v => v.PostVote) 
          }).ToList(); 
         return View("Index", model); 
        } 
        break; 
} 

でこのスイッチがあり、異なっている唯一のラインは.OrderByDescending(p => p.PostId).ToList()と私はさらにいくつかの類似していますが、私は選択中のすべてのコードを複製することなく、それをどのように書くことができます等?以下のような

+0

'VARデータ= db.Posts.Includeた(p => p.Vote);'その後、あなたのswitch文は、それを注文する - '場合、 "最新":データ=データを。 OrderBy(...) 'など、最後に' var model = data.Select(.... ' –

答えて

1

何か:

var qry = db.Posts.Include(p => p.Vote); 
select (sorting) { 
    case "newest": 
    qry = qry.OrderBy(x => x.Date); 
    break; 

    case "oldest": 
    qry = qry.OrderByDescending(x => x.Date); 
    break; 
} 
var res = qry.Select(p => new ListPostsViewModel { 
         … 
        }); 
return View("Index, res); 
関連する問題