2013-07-02 60 views
8
'a bağlan

Tam eşleşme olmadan SQL'e LINQ nasıl bağlanabilirim? Mesela ben verilerle John Smith (2) içeren bir tablo form var demek ve masanın name alanda Smith bunu katılmak istiyorum. like anahtar kelime bana kullanılabilir olması için görünmüyor buKullanım SQL'de LINQ içeriyor

var query = 
    from f in db.form 
    join n in db.name 
     on f.nameField like '%' + n.firstName + '%' 

rağmen gibi bir şey.

cevap

9

Linq birleşiminde like kullanamazsınız. Aslında, like Linq'de, yalnızca StartsWith, EndsWith veya Contains gibi geleneksel dize yöntemlerini kullanamazsınız.

var query = 
    from f in db.form 
    from n in db.name.Where(x => f.nameField.Contains(x.firstName)) 
    ... 
+1

Kodumda bazı garip uygulama hataları olup olmadığını bilmiyorum, ama bu bana bir hata verdi: 'Sadece istemci üzerinde değerlendirilebilecek argümanlar su String.Contains için pported ben ayrıntılı olarak bu 'yerine Contains'' arasında IndexOf' kullanarak çalışmak lazım method.' [burada] (http://stackoverflow.com/a/7574433/1080891) –

+0

@CavynVonDeylen Hmm, görünüyor Linq'den SQL'e bir sınırlama olmak. string.Contains', diğer ORM'lerde standart mekanizmadır. –

+1

@CavynVonDeylen, db.name.ToList() öğesinden n'den aşağıdaki 'nı yapmaya çalışabilirsiniz. (X => f.nameField.Contains (x.firstName))'. '.ToList()' yöntemi, varlık kümesini değerlendirir ve her şeyi veritabanından belleğe geçirir. Bunu yaparak, 'string.Contains()' yöntemini kullanabilirsiniz. Sadece farkında olun ve masanızdaki tüm nesneleri bir kerede değerlendirmeyin. –

5

Aslında a way of doing it vardır, ancak standart linq malzeme kullanmak kadar düzgün değil:

Böyle bir şey yapmak zorundayız

from c in dc.Organization 
where SqlMethods.Like(c.Hierarchy, "%/12/%") 
select *; 

(ödünç Bağlantılı sorudaki kullanıcı LP'nin yanıtı)

+1

+1 İyi bir nokta, bu OP, Linq-to-SQL kullanıyor çünkü çalışacaktır. Çoğu durumda, bu yöntem tercüme olmaz. –

+1

@ p.s.w.g true! Bunu söylemeliydim, bu kesinlikle linq-to-sql. – Chris