2015-01-29 21 views
6

Bu, SQL'de nasıl görünür (SQL Server, özellikle istiyorsanız)?SQL eşdeğeri LINQ. All()

// where people is a list of Person objects with property Name 
bool bobs = people.All(p => p.Name == "Bob"); 
orada kriterlerini eşleşmeyen tüm kayıtlar olup olmadığını kontrol ediyorum
+0

'.All()' operatörü ne yapar? –

+0

Neden bob'u çok istiyorsun? – Zane

+0

@ypercube: Durum tüm öğeler için doğruysa, doğru döner. – Guffa

cevap

5

: null karşılaştırarak ilişkin kurallar olarak

not exists(select * from Persons where not Name = 'Bob') 

C# ve SQL arasındaki farklı, sizin için bir koşul gerekir boş değerler alan onları izin verirse:

not exists(select * from Persons where Name <> 'Bob' or Name is null) 
+5

Bunu yeniden yorumlayabilir misiniz, bu yüzden beynimin okumasına zarar vermez mi? Belki 'Adı Adı <> 'Bob' – Zane

+2

Anlaştık,' İsim <> 'Bob' 'Name = 'Bob' den çok daha sezgisel. –

+1

@Zane: Durumu orijinal koddan ayırt edilebilir kılmak ve olası herhangi bir kenar durumundan kaçınmak için yazdım. Doğal olarak, sonucun aynı olduğunu biliyorsanız, <> operatörünü kullanabilirsiniz. – Guffa

3

ben tam olarak Linq yaratacak ne sorgu emin değilim ama SQL eşdeğer ALL op olduğunu erator:

'Bob' = ALL (SELECT name FROM people) 
+0

Bu durumda, aynı, ancak SQL 'all' operatörünün' All' yöntemine eşdeğer değildir. Örneğin, '.All (p => p.name == p.nick)' gibi bir koşulu kullanarak 'all' operatörünü kullanarak kolayca tercüme yapmaz. – Guffa

+0

@Guffa. doğru. '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' Linq'in 'All()' ı çeviremediğinden eminseniz cevabımı kaldırmam gerekir. –