参数类型lambda表达式不能赋值给参数类型int error

时间:2014-05-15 13:15:02

标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 lambda

我有一个Major这样的模型:

public int Id { get; set; }
public string MajorName{ get; set; }
public string Password { get; set; }
public System.DateTime RegisterDate { get; set; }
public string StudentId { get; set; }
public string State { get; set; }
public int FacultyId { get; set; }
public int MajorId { get; set; }
public HttpPostedFileBase ImgFile { get; set; }

所以我在上面的模型库中有这样的方法:

public Major FindMajorById(int id)
{
    return _dbcontext.Majors.Find(id);
}

在我看来,我通过了身份证,我需要专业名称:

<td>
    @{
        EducationRepositor.MajorRepository objmajor=new MajorRepository();
     }
     @Html.DisplayFor(objmajor.FindMajorById(modelItem => int.Parse(item.MajorId)).MajorName)
</td>
<td>
    @Html.DisplayFor(modelItem => item.Degree)
</td>

但是我在这一行中看到了错误:

@Html.DisplayFor(objmajor.FindMajorById(modelItem => int.Parse(item.MajorId)).MajorName)

我的错误:

  

参数类型lambda表达式不能赋值给参数类型int

4 个答案:

答案 0 :(得分:5)

我怀疑你基本上得到了你的lambda表达式并且你的方法调用错误的方法。您可能想要:

@Html.DisplayFor(modelItem => objmajor.FindMajorById(int.Parse(modelItem.MajorId)).MajorName)

换句话说,您正在创建一个lambda表达式,它接受一个模型项,解析其MajorId属性,调用FindMajorById,然后使用结果的MajorName属性。该lambda表达式用作DisplayFor的参数。

我不是MVC专家(无论如何),所以不清楚lambda表达式提供了多少好处,但是 - 你是否真的可以直接调用该方法。

答案 1 :(得分:1)

您必须使用int.Parse(item.MajorId)代替

modelItem => int.Parse(item.MajorId)

您收到的错误消息非常清楚,您尝试将lambda表达式作为参数传递给方法,该方法只接受一个int类型的参数。所以在DisplayFor内 你必须使用

objmajor.FindMajorById(modelItem => int.Parse(item.MajorId)

答案 2 :(得分:1)

FindMajorByID期望int值,并且您传递的是带有objmajor.FindMajorById(modelItem => int.Parse(item.MajorId)的lambda表达式。

我相信你需要传递它MajorId,如:

objmajor.FindMajorById(int.Parse(item.MajorId))

由于您的班级int.Parse已被宣布为MajorId,因此不确定您为什么要int。如果您的模型指向另一个类,其中MajorId为字符串,则使用int.Parse否则您将收到编译错误。

答案 3 :(得分:1)

请尝试以下方法:

@Html.DisplayFor(modelItem => objmajor.FindMajorById(int.Parse(modelItem.MajorId)).MajorName)