2011-01-18 18 views
7

Bazı demografik verileri depolayan Population adlı bir tablonun olduğunu varsayalım. T-SQL, 50 yaş üstü insanların sayım sonucuna varmak için, böyle bir şey yapabilir: Sayım yaparsam Linq önce tüm kayıtları alır mı?

SELECT COUNT(*) FROM POPULATION 
WHERE AGE > 50 

Aşağıdaki linq deyimi işe düşündüm, ama sadece sıfır döndürür ve nedenini anlamıyorum.
var count = _context.Populaton.Where(x => x.Age > 50).Count(); 

var count = _context.Population.Select(x => x.Age > 50).Count(); 

Neden Yukarıdaki senaryolar harf: Benim aslında sayım sonucuna varmak için Amacıyla

var count = _context.Population.Count(x => x.Age > 50); 

, ben aşağıdakilerden birini yapmak zorunda?

+2

Dışarıda bıraktığınız uygulama ayrıntıları var mı? context.TableName.Count (x => x.SomeCondition); benim için iyi çalışıyor. – jeffora

+0

İlk LINQ ifadeniz *, * son iki gibi çalışmalıdır. Sağlayıcı ile ilgili bir sorun gibi geliyor. Hangi LINQ sağlayıcısı kullanıyorsunuz? – Greg

+0

Bu soru için seçtiğiniz cevap yanlış ve alakasız. Büyük olasılıkla, kullanmakta olduğunuz sorgu sağlayıcı ile devam eden başka bir şey var. – jason

cevap

-2

Doğru. Herhangi bir SQL deyiminde olduğu gibi , izlemeniz gereken belirli bir sıraya sahiptir. ve nerede bir sayı yaparsanız, temelde ona bir şey yapmak için bir şey vermezsiniz. Linq, önce tüm kayıtları geri alamaz.

1

veritabanından dönen, ama aslında COUNT ifadeyi içerecek şekilde oluşturulan SQL değişecektir. Sorgu hemen yürütülür

SELECT 
    COUNT(1) 
    FROM [dbo].[Population] AS [Extent1] 
    WHERE [Extent1].[Age] > 50 

Eğer Count() aradığında: Oluşturulan TSQL sorgu Basit bir versiyonu gibi bir şey olurdu. Tüm sorgularınız doğru gibi görünüyor, bu yüzden sorgunun düzgün şekilde çalıştığından emin olmak için veritabanınızı, sağlayıcınızı ve bağlamınızı kontrol edin.

İlgili konular