-1

我有一个视图模型,结合3个模型的数据。查看模型的排序?

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; } 
    } 

这里的控制器:

 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); 
    } 

我怎样才能添加排序功能,这个视图模型?我想按供应商名称排序& LastUpdateDate。我在这里按照这个教程:https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/sort-filter-page。它不适用于我的视图模型,因为我只能对供应商信息进行排序。我想排序促销,联系&分销商信息以及。

+0

你想排序什么? – WellerEE

+0

你通常会用'.OrderBy()'对一个集合进行排序。 “它不适用于视图模型”是什么意思?你尝试了什么,它是如何失败的? – David

+0

@WellerEE名称和日期 –

回答

0

不能确定你要在这里做什么之前:

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

的是语义对我来说真的没有意义,我相信编译器也同样困惑。您是否想要对VendorsDistributors集合进行排序?这将是两个单独的排序操作。事情是这样的:

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

当你有,你要到另一个集合执行一个集合的操作,你只是做给其他集合同样的事情。这些陈述不会以某种方式嵌套在一起。

0

我会用.Order通过(...)在我原来的查询tolistasync调用