【发布时间】:2014-12-27 02:22:16
【问题描述】:
我正在尝试找出模型参数的 ICollection 的显示或 LINQ 调用。具体来说,这是我的PurchReq 模型(采购申请):
public enum FiscalYear
{
[Display(Name="2013")]
LastYear,
[Display(Name="2014")]
ThisYear,
[Display(Name="2015")]
NextYear
}
public class PurchReq
{
[Key]
public int PurchReqID { get; set; }
[Display(Name="Fiscal Year")]
public FiscalYear FiscalYear { get; set; }
//[ForeignKey("Project")]
//public int ProjectID { get; set; }
[Required]
[Display(Name="Purchase Requisition Number")]
public string PurchReqNum { get; set; }
public string GLCode { get; set; }
public string Fund { get; set; }
public string Division { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Display(Name = "Purch Req Created")]
public DateTime? DateCreated { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Display(Name = "Purch Req Submitted")]
public DateTime? DateSubmitted { get; set; }
//many projects to many purchReqs
//public virtual Project Project { get; set; }
public virtual ICollection<Project> Projects { get; set; }
public PurchReq()
{
DateCreated = System.DateTime.Now;
Projects = new HashSet<Project>();
}
这是我的索引方法的 PurchReqController:
var purchReqs = from p in db.PurchReqs
select p;
if (!string.IsNullOrEmpty(searchString))
{
purchReqs = purchReqs.Where(s => s.Projects.Any(item => item.Vendor.VendorName.Contains(searchString)));
}
switch (sortOrder)
{
case "ProjectName_desc":;
purchReqs = purchReqs.OrderByDescending(s => s.Projects);
//Any(item => item.Vendor.VendorName).ThenBy(n => n.Project.Description));
break;
case "PurchReqNum_desc":
purchReqs = purchReqs.OrderByDescending(s => s.PurchReqNum);
break;
case "PurchReqNum_asc":
purchReqs = purchReqs.OrderBy(s => s.PurchReqNum);
break;
case "FiscalYear_desc":
purchReqs = purchReqs.OrderByDescending(s => s.FiscalYear);
break;
case "FiscalYear_asc":
purchReqs = purchReqs.OrderBy(s => s.FiscalYear);
break;
case "GLCode_desc":
purchReqs = purchReqs.OrderByDescending(s => s.GLCode);
break;
case "GLCode_asc":
purchReqs = purchReqs.OrderBy(s => s.GLCode);
break;
case "Fund_desc":
purchReqs = purchReqs.OrderByDescending(s => s.Fund);
break;
case "Fund_asc":
purchReqs = purchReqs.OrderBy(s => s.Fund);
break;
case "Division_desc":
purchReqs = purchReqs.OrderByDescending(s => s.Division);
break;
case "Division_asc":
purchReqs = purchReqs.OrderBy(s => s.Division);
break;
case "DateCreated_desc":
purchReqs = purchReqs.OrderByDescending(s => s.DateCreated);
break;
case "DateCreated_asc":
purchReqs = purchReqs.OrderBy(s => s.DateCreated);
break;
case "DateSubmitted_desc":
purchReqs = purchReqs.OrderByDescending(s => s.DateSubmitted);
break;
case "DateSubmitted_asc":
purchReqs = purchReqs.OrderBy(s => s.DateSubmitted);
break;
default:
purchReqs = purchReqs.OrderBy(s => s.Projects);
//purchReqs = purchReqs.OrderBy(s => s.Projects.Any(item => item.Vendor.VendorName)).ThenBy(n => n.Project.Description);
break;
}
return View(purchReqs);
上面的控制器因为无法对 ICollection Projects 进行排序而抛出 DbSort 错误,这是可以理解的。我需要按 Projects.Project.Vendor.VendorName 对集合进行排序。这最初在 PurchReq 到 Project 是多对一但最近更改为多对多时有效。任何建议和帮助将不胜感激。
【问题讨论】:
-
您得到的确切错误是什么?
-
我收到项目集合的 DBSort 错误。我认为这是因为在启动排序时它现在不知道如何处理“项目对象”。
标签: c# linq icollection