-1

私は、3つのモデルからのデータを組み合わせたビューモデルを持っています。ビューモデルのソート?

 public async Task<IActionResult> Index(int? id) 
      { 
ViewData["NameSortParm"] = String.IsNullOrEmpty(sortOrder) ? "name_desc" : ""; 
      ViewData["DateSortParm"] = sortOrder == "Date" ? "date_desc" : "Date"; 

      var viewModel = new VendorVM(); 
        viewModel.Vendors = await _context.Vendors 
         .Include(i => i.Promos) 
         .Include(i => i.Contacts) 
         .Include(i => i.Distributors) 
         .AsNoTracking() 
         .ToListAsync(); 
        if (id != null) 
        { 
         ViewData["VendorID"] = id.Value; 
         Vendor vendorVM = viewModel.Vendors.Where(
          i => i.VendorID == id.Value).Single(); 
         viewModel.Promos = vendorVM.Promos.ToList(); 
         viewModel.Contacts = vendorVM.Contacts.ToList(); 
         viewModel.Distributors = vendorVM.Distributors.ToList(); 

switch(sortOrder) 
       { 
        case "name_desc": 
         viewModel.Vendors = viewModel.Vendors.OrderByDescending(i => i.VendorName); 
         break; 
        case "Date": 
         viewModel.Vendors = viewModel.Vendors.OrderBy(i => i.Distributors.OrderBy(v => v.LastUpdateDate)); 
         break; 
        case "date_desc": 
         viewModel.Vendors = viewModel.Vendors.OrderByDescending(i => i.Distributors.OrderByDescending(v => v.LastUpdateDate))); 
         break; 
        default: 
         viewModel.Vendors = viewModel.Vendors.OrderBy(i => i.VendorName); 
         break; 
        } 
        return View(viewModel); 
    } 

私は、このビューモデルに機能を追加することができソート方法:

public class VendorVM 
    { 
     public IEnumerable<Vendor> Vendors { get; set; } 
     public IEnumerable<Promo> Promos { get; set; } 
     public IEnumerable<Contact> Contacts { get; set; } 
     public IEnumerable<Distributor> Distributors { get; set; } 
    } 

ここでコントローラがですか?ベンダー名で並べ替えたい& LastUpdateDate。私はここでこのチュートリアルに従っています:https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/sort-filter-page。ベンダー情報のみを並べ替えることができるので、私のビューモデルでは機能しません。私はプロモーション、連絡先&ディストリビューターの情報を並べ替えたいと思います。

+0

何を並べ替えたいですか? – WellerEE

+0

一般に '.OrderBy()'を使ってコレクションをソートします。 「ビューモデルでは機能しません」とはどういう意味ですか?あなたは何を試しましたか?どのように失敗しましたか? – David

+0

@WellerEEの名前と日付 –

答えて

0

あなたがここで何をしようとして、本当にわからない前に、私の元のクエリに.ORDERことで(...)を使用します。

viewModel.Vendors = viewModel.Vendors.OrderBy(i => i.Distributors.OrderBy(v => v.LastUpdateDate)); 

ことの意味実際に私には意味をなさないが、私はコンパイラが同じように混乱していると確信している。 VendorsコレクションとDistributorsコレクションの両方を並べ替えようとしていますか?これは、2つの別々のソート操作です。

他のコレクションで操作したいコレクションに対して操作を行っている場合は、他のコレクションと同じことを行うだけです。これらのステートメントは、どうにかして相互にネストされません。

関連する問題