【问题标题】:Linq and DisplayFor in ASP.Net MVCASP.Net MVC 中的 Linq 和 DisplayFor
【发布时间】:2014-02-19 19:02:32
【问题描述】:

我的模型有一个ICollection 的电话号码。在我看来,我想显示标记为主要记录的值。

@Html.DisplayFor(model => model.Telephones.Where(a=>a.Primary==true).Number)

.Number 不允许在 Linq 语法中使用。如何使上述线路正常工作,或者更确切地说,显示数字的正确方法是什么?

我可能应该在控制器中执行逻辑并将值放入视图模型中,但看起来这应该是可行的。

【问题讨论】:

  • 我觉得最好有一个名为 PrimaryNumber 的只读属性,您可以在其中执行 linq 操作来获取数字。然后将 displayfor 绑定到该数字属性。
  • 你为什么会有这种感觉?
  • 我有这种感觉,因为模型逻辑应该驻留在模型层

标签: c# asp.net asp.net-mvc linq razor


【解决方案1】:

Where 扩展方法返回一个IEnumerable<T>。如果您只想要满足条件的第一项,请使用First

@Html.DisplayFor(model => model.Telephones.First(a => a.Primary).Number)

如果您还需要确保集合中的恰好一个项满足条件(否则抛出异常),请考虑使用Single

@Html.DisplayFor(model => model.Telephones.Single(a => a.Primary).Number)

【讨论】:

  • 如果没有找到数字应该注意大小写。我相信在那种情况下 First 返回 null 这将导致 NullRef 异常。需要处理这种情况。
  • @LB2 你在想FirstOrDefaultFirst 如果找不到至少一个满足条件的元素,将引发 InvalidOperationException
  • 另外,请注意,如果您使用的是 .Single,您实际上会发出 Top 2 vs First,后者执行 Top 1。使用 Single 的唯一原因是如果您需要抛出异常如果存在多个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 2012-08-01
相关资源
最近更新 更多