2013-11-09 131 views
1

我有一个名为InventoryItem的表,它由列ItemDescription和Item BalanceQty组成。我想获取在ComboBox中选择的ItemName的BalanceQty。为此,我在数据访问层创建方法,并利用实体Framework.This是我的代码看起来是通过代表ItemDescription的这个method.This字符串值的字符串参数已经实现:无法将类型'System.Linq.IQueryable <double?>'转换为'float'

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

    return availableQty; 
}  

但它给我出现以下错误 -

Can not c onvert type'System.Linq.IQueryable'to'float'

我在哪里出错了?

回答

3

也许你需要这个:

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

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

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

+0

感谢它的工作! – user2718073

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。

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

相关问题