2009-07-14 29 views
34

Neden her zaman == operatörü kullanmak yerine linq birleştirme içinde bir equals anahtar sözcüğün olduğunu merak ettim. Bunun yerineLinq: Birleşimdeki == ile eşittir arasındaki fark nedir?

Property deadline = 
(from p in properties 
join w in widgets 
    on p.WidgetID == w.ID 
select p).First(); 

[DÜZ] arasında

Property deadline = 
(from p in properties 
join w in widgets 
    on p.WidgetID equals w.ID 
select p).First(); 

soru değiştirmişler ve örnekler revize.

cevap

38

The Moth Matt Warren tarafından güzel bir açıklaması var:

"nedeni C# kelime 'eşittir' vardır '==' operatör açıkça 'açık' tümcesi ihtiyaçları olduğunu yapmaktı yerine Eşitlik için karşılaştırılan iki ayrı ifadeyi, tek bir tekil ifade olarak değil, birleştirmek için şablon eşlemleri Enumerable.Join() standart sorgu işlecine karşılaştırır ve bu değer, daha sonra karşılaştırılabilen değerleri hesaplamak için kullanılan iki ayrı delegeyi belirtir. Bir arama tablosu oluşturmak için ayrı bir delegeler olarak ihtiyaç duyar ve diğeriyle birlikte arama tablosunu araştırır. SQL gibi tam bir sorgu işlemcisi tek bir varsayılan ifadeyi incelemekte ve işleyecek. Oysa LINQ katılmak koşulu daima bir ifade ağacında, basit bellek içi nesne durum için önemli bir yükü ile belirtilmesi gerektirecektir SQL benzer işletmek yapmak."

Ancak bu join ilgilidir. I' equals emin (hatta derler?) sizin kod örneğinde kullanılmalıdır değilim.

+1

Haklısınız, derleme bile değil, kötü! == ve equals ile ilgili bir sorunla karşılaştığımdan beri biraz zaman geçti, ama sanırım yanlışlıkla bir == kullanıyorum. Yine de açıklama için teşekkürler! –

15

ilk versiyonu katılır içinde. Sen sadece kullanımını equals derleme değil için equijoin ayrı yarıları açıklığa kavuşturmak derleyici

+0

Evet ... Birincisi iyidir. –

+0

Evet, üzgünüm, kötüyüm. Sorunun (tabii ki bir katılımla yapıldığı) bu yana bir süredir, yanlışlıkla eşittir == yerine eşittir ve ilk etapta neden bir anahtar kelime olduğunu merak ettim. Buna bir cevap bulamadığım için hatırladım;) –

+0

Bu yüzden katılma durumunda, == kullanmak yasal mı yoksa her zaman eşittir mi? –

İlgili konular