无法转换类型&#39; System.Linq.IQueryable <double?>&#39;到&#39;浮动&#39; </double?>

时间:2013-11-09 07:40:32

标签: c# linq entity-framework

我有一个名为InventoryItem的表,它由ItemDescription和Item BalanceQty列组成。我想获取在comboBox中选择的ItemName的BalanceQty。为此,我在我的数据访问层中创建了一个方法并传递了表示的字符串参数ItemDescription到此方法的字符串值。这是使用Entity Framework实现的。这就是我的代码的外观:

public float GetAvailableQty(string itemName)
{
    float availableQty =(from table in context.InventoryItem
    where table.ItemDescription == itemName
    select table.BalanceQuantity);

    return availableQty;
}    

但是它给了我以下错误 -

  

无法将'System.Linq.IQueryable'类型转换为'float'

我哪里错了?

2 个答案:

答案 0 :(得分:3)

可能你需要这个:

double availableQty =(from table in context.InventoryItem
    where table.ItemDescription == itemName
    select table.BalanceQuantity).Sum();

IQueriable返回表达式树。像这样的查询结果是行集,并且可以通过使用ToList()或隐式地通过赋予IEnumerable来实现IEnumerate。但无论如何它将是行集,而不是单个值。如果您确定查询返回单个查询,则使用.Single()或SingleOrDefault。请参阅IQueriable的其他扩展方法。

否则,如果需要数组,则将结果赋给某个IEnumerable变量。

答案 1 :(得分:1)

因为你的Linq返回了一个Iqueryable ......

让我们假设你有3行,其中一个项目有3个不同的quatities(愚蠢,我知道,但想想其他可以为每个项目设置多个值的东西,比如颜色的颜色)。您的linq将返回三个数量,并且您假设它是一个数字

您可以使用FirstFirstOrDefault来获取第一个项目,或者该对象的默认值。

在你的情况下,它应该没关系,但你应该意识到Linq是如何工作的以及它返回的......


另一个例子:

让我们假设:List numbers = {1,2,3,4,5,6}(我们假设它们是整数)。 你这样做:var small_numbers = numbers.Where(x => x<4) 你得到的是你可以查询的东西:foreach (var small in small_numbers) {...})。结果不是int。

你可以选择第一个,最后一个,实际上,这将是一个int。但你得到的是一个集合。所以,即使你这样做:var one_result = numbers.Where(x => x<2)one_result也不是int。

相关问题