如何将字符串转换为nullable int LINQ

时间:2015-04-26 18:09:21

标签: linq asp.net-mvc-4

我看到很多像这样的问题,但似乎我找不到任何相互关联的东西,并为我找到解决方案。我正在使用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),它返回相同的错误。

1 个答案:

答案 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