【问题标题】:argument type lambda expression is not assignable to parameter type int error参数类型 lambda 表达式不可分配给参数类型 int 错误
【发布时间】:2014-05-15 13:15:01
【问题描述】:

我有一个像这样的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);
}

在我看来,我传递了 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

【问题讨论】:

  • 是的,您的FindMajorById 方法采用int,并且您提供了一个lambda 表达式。你希望它做什么?
  • 我想显示我的专业名称而不是ID,
  • 那么我如何传递 lambda 提供的专业的 id?
  • 所以改变你的方法来接受一个表达式,或者改变你对该方法的调用来传递一个 int ...

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 这很有道理。
【解决方案2】:

你必须使用int.Parse(item.MajorId) 而不是

modelItem =&gt; int.Parse(item.MajorId)。

你得到的错误信息很清楚,你试图将一个 lambda 表达式作为参数传递给一个方法,该方法只接受一个 int 类型的参数。所以在你的DisplayFor 你必须使用

objmajor.FindMajorById(modelItem =&gt; int.Parse(item.MajorId).

【讨论】:

    【解决方案3】:

    FindMajorByID 需要一个 int 值,而您正在向它传递一个带有 objmajor.FindMajorById(modelItem =&gt; int.Parse(item.MajorId) 的 lambda 表达式。

    相信你需要通过MajorIdlike:

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

    不太清楚你为什么要做int.Parse,因为在你的类中MajorId 已经被声明为int。如果你的模型指向不同的类,它有MajorId 作为字符串,那么使用int.Parse 否则你会得到一个编译错误。

    【讨论】:

      【解决方案4】:

      尝试以下方法:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-21
        • 1970-01-01
        • 2020-12-03
        • 2020-04-12
        • 2021-03-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多