我看到很多像这样的问题,但似乎我找不到任何相互关联的东西,并为我找到解决方案。我正在使用MVC 4应用程序,其中我有一个带有一些值的下拉列表。
我正在使用viewbag填充它。
ViewBag.Roles = new SelectList(db.Roles, "RoleId", "RoleName");
在视图中,我的下拉列表如下所示。
@Html.DropDownList("selectedRole", ViewBag.Roles as SelectList, String.Empty)
字符串selectedRole
从视图中获取RoleId
值。
在此之后,我正在使用selectedRole
对数据库进行一些LINQ,这表示我无法在LINQ中将字符串转换为Int,这是我真正想要的,所以我可以返回更好的结果。
public ActionResult SearchResults(string selectedRole, string selectedCourse, string SearchParam)
{
var members = (from m in db.Members
select m);
if (!String.IsNullOrEmpty(selectedRole))
{
members = (from m in db.Members
where m.UserRole == Int32.Parse(selectedRole)
select m);
}
//some more if's here...
return View(members.ToList());
}
所以问题是如何将此selectedRole
转换为Integer。在LINQ中进行转换时是否有任何要遵循的规则?
PS:我也尝试Convert.ToInt32(selectedRole)
,它返回相同的错误。
答案 0 :(得分:2)
在这种情况下,问题无关紧要......
business
你不是在linq中做的,你是在外面做的。
一般情况下,您不使用Linq,而是使用Linq-to-Sql或Linq-to-Entities,因为if (!String.IsNullOrEmpty(selectedRole))
{
int selectedRole2 = Int32.Parse(selectedRole);
members = (from m in db.Members
where m.UserRole == selectedRole2
select m);
是一个表。可悲的是,至少Linq-to-Entities没有任何演员方法。您可以使用用户定义的函数获得类似的东西,但它有点复杂。 Linq-to-Sql应该支持Members
(参见https://msdn.microsoft.com/en-us/library/vstudio/bb882655.aspx)