2011-11-28 51 views
7

Veri tabanımdaki bir tam sayı ile karşılaştırmak için fiyat düzeyimi seçmek istiyorum. Ancak hata: Operatör '==', 'System.Linq.IQueryable' ve 'int' türündeki işlenenlere uygulanamaz. Bu benim kodudur: Bu tanım başınadırconvert 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"); 
} 

} 

cevap

10

var list_pricelevel

birden fazla satır iade edilebilir çünkü int.

SQL sözdizimini kullanmayın (yalnızca lambda) ancak sonunda .FirstOrDefault veya Single veya veya First eşdeğerini kullanın. Temel olarak ilk sırayı alıyoruz.

+0

Afedersiniz, açık bir şekilde açıklayabilir misiniz?Linq'ime ilk harfimi eklemek zorunda mıyım? – Nothing

+0

Evet. Çünkü LINQ orada tam olarak bir satır olacağını bilemez. Her şey için birkaç satır olabileceğini biliyor ve bir "list_pricelevel" değeri yerine bunların çoğunu elde edersiniz. –

+0

Teşekkürler TomTom, Şimdi çalışıyor. – Nothing

0

olduğunu önerim:

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

Bu, where c.WebAccount == userName numaralı ürünü tatmin eden Müşterilerde ürün olmaması durumunda NullReferenceException'ı yükseltebilir.

Açıklama:

list_pricelevel öğeleri IEnumerable sizin nerede maddesini tatmin olduğunu.

0

Koleksiyondan ilk öğeyi almanız gerekiyor. Gerçekten ne istediğinizi karar verene kadar nihai sonucu elde erteleme böylece her Sorgu bir IQueryable döndürür Linq güzelliği de

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

. Diğer bir deyişle, başka bir sorgu üzerinde bir sorguyu yürütebilirsiniz :) Yani bir sorgudan gerçek verileri elde etmek için, gerçekten istediğiniz şeyi döndüren bir komut yürütmelisiniz. Sorunuzda sadece bir değer döndürmeyi beklediğinizden, "FirstOrDefault", "Single" veya "First" gibi herhangi bir yöntem, LinQ ifadesinden elde ettiğiniz sonuca sahip olduğunuz zaman

1

numaranızı yapacak sonuç kümesi listesi. Kodunuzdaki Yani

aşağıdaki gibi sorguluyorsunuz zaman:

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

list_pricelevel Listesi yani IQueryable listenin şeklinde olacak,

böylece tek bir eleman almak zorunda tek eleman ile kontrol

yüzden aşağıdaki kodu kullanabilirsiniz:

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. 
İlgili konular