2013-11-09 156 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不是一個整數。

相關問題