Я пытаюсь вычислить отображение или вызов LINQ в параметре модели ICollection
. В частности вот моя модель PurchReq
(заявок):Как вы относитесь к собственности ICollection?
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);
Контроллер выше бросает ошибку DbSort, потому что он не может сортировать Проекты ICollection, которые понятны. Мне нужно отсортировать коллекцию Projects.Project.Vendor.VendorName. Это первоначально работало, когда PurchaseReq для Project было много-к-одному, но недавно изменилось на многие-ко-многим. Любые советы и помощь будут высоко оценены.
Какая у вас ошибка? – Dan
Я получаю ошибку DBSort для коллекции проектов. Я предполагаю, что это связано с тем, что теперь не так, как обращаться с «объектами проекта» при запуске сортировки. – Aisarang