2016-11-14 80 views
1

如果CoId2有记录,我想设置ViewBag.Job_CoId2,但在第三行中出现错误!确定类型为“var”的列表变量的计数

SelectList Job_CoId = 
     new SelectList(db.COM_Company.OrderBy(a => a.COM_Name), "COM_ID", "COM_Name"); 
    var CoId2 = db.Job_CoId2 
     .Where(a => a.IDMainCo == Job_CoId.First().Value); 
    if ((CoId2.Count()) > 0) 
     ViewBag.Job_CoId2 = 
      new SelectList(CoId2.OrderBy(a => a.rank), "ID", "Name"); 

无法创建 类型 'System.Web.Mvc.SelectListItem' 的恒定值。在此上下文中仅支持基本类型或枚举 类型。

回答

1

您的问题似乎是,你需要一个列表SelectListItems(如List<SelectListItem>不是SelectList

//you may need to call .ToString() on non varchar columns such as your ID 
List<SelectListItem> Job_CoId = db.COM_Company.OrderBy(a => a.COM_Name) 
    .Select(a=>new SelectListItem{Name = a.COM_Name, Value = a.COM_ID}).ToList(); 

    //make sure Job_CoId has something else call .First() will fail 
    var CoId2 = db.Job_CoId2.Where(a => a.IDMainCo == Job_CoId.First().Value); 
    if ((CoId2.Count()) > 0){ 
    //we actually need a List<SelectListItem> for the view 
    ViewBag.Job_CoId2 = CoId2.OrderBy(a => a.rank) 
    .Select(r => new SelectListItem { Name = r.Name, Value = r.Id}).ToList(); 
    } 
    else{ 
     //null ref exception if you try and call this and nothing here 
     ViewBag.Job_CoId2 = new List<SelectListItem>(); 
    } 

现在,我认为我们可以打扫一下,因为我们可以在第二个下拉列表中结合一些您的通话。此外,请注意,SelectListItem将Name和Value转换为字符串,因此您可能需要将其转换回EF中的原始类型作为第二个查询。

List<SelectListItem> Job_CoId = db.COM_Company.OrderBy(a => a.COM_Name) 
     .Select(a=>new SelectListItem{Name = a.COM_Name, Value = a.COM_ID.ToString()}).ToList(); 
if(Job_CoId.Any()){ 
    //ID will be a string coming out of select list. 
    //may need to recast to an int for DB comparisons 
    var intId = int.Parse(Job_CoId.First().Value); 
    ViewBag.Job_CoId2 = db.Job_CoId2.Where(a => a.IDMainCo == intId) 
     .OrderBy(a => a.rank) 
     .Select(r => new SelectListItem { Name = r.Name, Value = r.Id}).ToList();  
}else{ 
    ViewBag.Job_CoId2 = new List<SelectListItem>(); 
} 
+0

我得到第二行的错误。 if((CoId2.Count())> 0)'。我甚至无法确定它是否返回记录。 –

+0

现在我看到Job_CoId了,您需要对其应用相同的修复程序,正如我在函数的第二部分中所提出的那样。再次,你需要一个'List ' – Tommy

+0

另外,如果Job_CoId有任何值,在下一行调用'.First()'这个集合时,如果没有匹配的值 – Tommy

0

使CoId2到.TOLIST():”

var Job_CoId = db.COM_Company.Select(x=>x.COM_ID).ToList(); 
    var CoId2 = db.Job_CoId2.Where(a => a.IDMainCo == Job_CoId.First().Value); 
    if ((CoId2.Count()) > 0) 
    ViewBag.Job_CoId2 = new SelectList(CoId2.OrderBy(a => a.rank).ToList(), "ID","Name"); 
+0

我增加了它,现在我得到了第一行的错误。 –

+0

你会告诉我什么错误吗? –

+0

无法创建类型为“System.Web.Mvc.SelectListItem”的常量值。只有原始类型或枚举类型在此上下文中受支持。 –