1

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

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”

我哪里错了?

4

2 回答 2

3

可能你需要这个:

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

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

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

于 2013-11-09T07:46:05.497 回答
1

因为您的 Linq 返回一个 Iqueryable ...

假设您有 3 行,其中包含 3 个不同数量的项目(我知道,这很愚蠢,但想想每个项目可以有多个值的其他事物,例如油漆的颜色)。您的 linq 将返回三个数量,并且您假设它是一个数字

您可以使用FirstorFirstOrDefault获取第一项,或该对象的默认值。

在您的情况下,这无关紧要,但您应该了解 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也不是 int。

于 2013-11-09T07:47:21.183 回答