我刚刚开始使用 LINQ,我正在尝试从数据库中选择并返回产品价格,如下所示:
public int GetPricePerKg(Product prod)
{
var result = from p in dc.Products
where p.pk_product_id == prod.pk_product_id
select p.product_price_kg;
return result;
}
这给了我错误:
Cannot implicitly convert type '
System.Linq.IQueryable<int?>
' to 'int
'
处理此问题的最佳方法是什么?我需要价格(在这种情况下是一个整数)并在另一个地方用它做一些计算
最佳答案
嗯,您已经选择了一个查询 - 理论上可以匹配 0、1 或更多记录。在每种情况下你想做什么?此外,它看起来像 product_price_kg
是 int?
- 如果它为 null,你想做什么?
您可能想要:
public int GetPricePerKg(Product prod)
{
return dc.Products.Where(p => p.pk_product_id == prod.pk_product_id)
.Select(p => p.product_price_kg)
.Single()
.Value;
}
...但是如果或者没有完全匹配的产品或者 price 属性为空,这将引发异常。
如果您愿意,您仍然可以使用查询表达式 - 但我倾向于不使用简单的情况,因为您随后想在最后添加一个方法调用。等效的查询表达式是:
return (from p in dc.Products
where p.pk_product_id == prod.pk_product_id
select p.product_price_kg).Single().Value;
或者,您可以使用带谓词的 Single()
版本,如下所示:
return dc.Products.Single(p => p.pk_product_id == prod.pk_product_id)
.product_price_kg.Value;
毫无疑问还有其他变体 - 它们都会做同样的事情 - 选择你认为最可读的一个。
编辑:其他选项而不是 Single
是:
第一
(应对1个或多个)FirstOrDefault
(应对0、1或更多)SingleOrDefault
(应对0或1)
对于 OrDefault
版本,如果您不匹配任何产品,您需要弄清楚该怎么做。
关于c# - 使用 LINQ 返回产品价格,在函数中使用什么返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7511704/