【问题标题】:convert from 'int?' to '<anonymous type: int pkg_ID>' [duplicate]从“int?”转换到'<匿名类型:int pkg_ID>' [重复]
【发布时间】:2014-12-15 16:10:19
【问题描述】:

我收到以下错误:

我不能隐式转换类型“int?”到'int'。存在显式转换(您是否缺少演员表?)

代码如下:

NoOfSales = vehicle.Sales.Count == 0 ? 0 : vehicle.Sales.Sum(s => s.NoOfSales)

【问题讨论】:

  • 查看 Nullable 类型的 HasValueValue 属性。
  • 对了,编译器告诉你你能做什么……你明白错误信息吗? (其实这里有一个更好的方法,就是总是使用Sum。)
  • 所以,阅读消息并执行它.. CAST!
  • @EugeneSh。不,请阅读该消息,并尝试理解它。如果您知道结果永远不会是null,那么强制转换才是正确的解决方案。

标签: c#


【解决方案1】:

就这样吧,

NoOfSales = vehicle.Sales.Sum(s => s.NoOfSales) ?? 0;

SumEnumerable.Sum(IEnumerable&lt;Nullable&lt;Int32&gt;&gt;) 重载忽略了 null 值。但是,如果序列中的所有值都为 null,则它必须返回 null

【讨论】:

  • 非常感谢.....Jodrell
  • 您不需要空合并运算符。 Sum 会将空值视为 0。
  • 再次显示此错误...转换为值类型“Int32”失败,因为具体化值为空。结果类型的泛型参数或查询必须使用可为空的类型。
  • 我的完整代码是 public ActionResult Report() { var context = new SalesDatabaseEntities(); var data = from vehicle in context.VehicleTables select new ReportInfo { Model = vehicle.Model, NoOfSales = vehicle.Sales.Count == 0 ? 0 : 车辆.Sales.Sum(s => s.NoOfSales) }; ViewBag.Reports = data.ToList();返回视图(); }
猜你喜欢
  • 1970-01-01
  • 2012-05-10
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 2021-07-29
  • 2016-01-11
  • 1970-01-01
相关资源
最近更新 更多