2011-11-28 215 views
7

我想在數據庫中選擇我的價格水平以與整數進行比較。但它是錯誤的:運算符'=='不能應用於'System.Linq.IQueryable'和'int'類型的操作數。 這是我的代碼:convert IQueryable <int> to <int>

if (Request.IsAuthenticated){ 

CustomerModels cm = new CustomerModels(); 

string userName = Page.User.Identity.Name; 
var list_pricelevel = from c in cm.DataContext.Customers 
         where c.WebAccount == userName 
         select c.PriceLevel; 
if (list_pricelevel == 3) { 
    Response.Write("Welcome"); 
} 

} 

回答

10

VAR list_pricelevel

這是根據定義不是int,因爲可以返回多行。

我不使用SQL語法(只有lambda),但在最後您需要等效於.FirstOrDefaultSingleFirst。基本上是第一排。

+0

不好意思,你能解釋清楚嗎?我必須添加。首先到我的linq? – Nothing

+0

是的。因爲LINQ不知道那裏只有一行。對於所有它知道可能有幾行,而不是一個'list_pricelevel'值,你會得到它們的多個。 –

+0

感謝TomTom,現在它工作。 – Nothing

0

這裏我的建議:

if (list_pricelevel.First() == 3) 
{ 
     Response.Write("Welcome"); 
} 

如果客戶中沒有滿足where c.WebAccount == userName的項目,則可能會引發NullReferenceException。

說明:

list_pricelevel是項目的IEnumerable的滿足您的where子句。

0

您需要從您的收藏中獲得第一件物品。

if (list_pricelevel.First() == 3) { 
    Response.Write("Welcome"); 
} 
0

這是一個LINQ,每個查詢返回一個IQueryable這樣你就可以得到推遲最終結果,直到你真的決定你想要的美麗。換句話說,您可以對另一個查詢執行查詢:) 因此,爲了從查詢中獲得真實數據,您應該對它執行一個實際返回所需內容的命令。 在你的情況,因爲你期待你的查詢返回只有一個值,像「FirstOrDefault」,「單」或「第一」任何方法將做詭計

1

當你有LinQ表達式的結果,你將永遠有結果集列表。

在你的代碼

所以,當你如下查詢:

var list_pricelevel = from c in cm.DataContext.Customers where c.WebAccount == userName select c.PriceLevel;

的list_pricelevel將在列表即IQueryable的列表的形式,

,所以你必須得只有一個元素檢查與一個元件

所以用下面的代碼:

if (list_pricelevel.Single() == 3) 
{ 
    Response.Write("Welcome"); 
} 

or 

if (list_pricelevel.First() == 3) 
{ 
    Response.Write("Welcome"); 
} 


both the above code gives you only one result set value so you can equate with 3 for validation. 
相關問題