C# 如何在MVC中从datatable中获取一个特定列到模型中
我想从SkillId的数据库中获取员工对自己的所有技能评分。目前,我在模型中存储了Ratings表中的所有字段,但只想获取SkillId,但它告诉我Ratings不包含SkillId的定义C# 如何在MVC中从datatable中获取一个特定列到模型中,c#,asp.net-mvc,asp.net-mvc-4,razor,model-view-controller,C#,Asp.net Mvc,Asp.net Mvc 4,Razor,Model View Controller,我想从SkillId的数据库中获取员工对自己的所有技能评分。目前,我在模型中存储了Ratings表中的所有字段,但只想获取SkillId,但它告诉我Ratings不包含SkillId的定义 model.EmployeeRatings = db.Ratings.Where(r => r.EmployeeId == User.Identity.Name.Remove(0, 8)) .OrderBy(s => s.Skil
model.EmployeeRatings = db.Ratings.Where(r => r.EmployeeId == User.Identity.Name.Remove(0, 8))
.OrderBy(s => s.SkillId);
(这是按用户的EmployeeId存储Ratings表中的所有字段)
我可以通过将它放在视图上的foreach循环中并获取所有skillid来实现这一点,但我希望将这些数据存储在模型中,以便可以轻松地将其放入视图中的HTML.DropDownListFor()中
是否可以仅从模型中的评级表中获取SkillId,并省略表中的所有其余数据?看起来您只是在寻找
选择:
...OrderBy(s => s.SkillId).Select(s => s.SkillId);
但是,如果这将用于选择列表,无论如何,您最好从一开始就构建一个IEnumerable
:
.Select(s => new SelectListItem { Value = s.SkillId.ToString(), Text = s.SkillName });
将视图模型更改为IEnumerable并在将其更改为建议代码后尝试运行代码后,它给出了一个错误:“LINQ to Entities无法识别方法'System.String ToString()'方法,并且此方法无法转换为存储表达式”这与Select
语句的位置无关。这个错误从字面上告诉你问题是什么。当您选择SkillId
时,您将得到一个IEnumerable
(因为SkillId
显然属于long
)类型,它不能存储在IEnumerable
类型的属性中:long
与Rating
不同。您需要添加另一个属性以将其存储到正确类型的文件中,或者使用类似于ViewBag
的其他内容。非常感谢!我想我已经通过将视图模型中的类型更改为IEnumerable,而不是“LINQ to Entities不识别”Select=>new SelectListItem
-来解决这个问题,所以做一些LINQ to Entities喜欢的事情,然后在后面转换为Select列表项,即:.OrderBy(s=>s.SkillId)。Select(s=>new选择(x= >新的StastListITEM {Value= x.SkiLID,Text=X.SkyNeN});中间的“代码> Toistist告诉EF继续前进,并将该点转换为SQL并运行SQL,然后取结果(这只是两个字段)并将它们转换为SelectListItem。