2011-03-24 37 views
6

Şöyle bir sorgu var:Entity Framework LINQ SQL joker nasıl kullanılır

IQueryable<Profile> profiles = from p in connection.Profiles 
    where profile.Email.Contains(txtSearch) 
    select p; 

Bunu SQL dönüştürüldüğünde kullandığı biliyorum bir LIKE '%<value of txtSearch>%' ama txtSearch = "jon%gmail.com" eğer `dönüştürür GİBİ '% jon ~% gmail.com%'. ~, Ortadaki% joker karakterden kaçar. Bunu nasıl halledebilirim? EF aramalarıma LINQ'm için vahşi kartlar koyabilmem gerekiyor.

cevap

2

Bunun linq ile doğrudan mümkün olduğundan emin değilim, çünkü yalnızca Contains, StartsWith veya EndsWith gibi temel dize işlevlerini çağırabilirsiniz. It is possible with Entity SQL böylece bu yaklaşımları birleştirebilirsiniz.

var query = new ObjectQuery<Profile>(
    @"SELECT VALUE p 
     FROM CsdlContainerName.Profiles AS p 
     WHERE p.Email LIKE '" + wildcardSearch + "'", 
    context); 

var result = query.AsQueryable().OrderByDescending(p => p.Name).ToList(); 

ESQL enjeksiyon saldırıları geri :)

enjeksiyon açığı olmadan

İkinci versiyon (bunu deneyin vermedi ama çalışması gerekir) : Ben oluşturma sayfa bir yönetici sayfası

var commandText = 
    @"SELECT VALUE p 
     FROM CsdlContainerName.Profiles AS p 
     WHERE p.Email LIKE @search"; 

var query = new ObjectQuery<Profile>(commandText, context); 
query.Parameters.Add(new ObjectParameter("search", wildcardSearch)); 

var result = query.AsQueryable().OrderByDescending(p => p.Name).ToList(); 
+0

Yani bir SQL enjeksiyon saldırısı konusunda endişelenmiyorum ama yukarıdaki yöntem bana bir SQL enjeksiyon saldırısına açılmıyor mu? –

+0

Sanırım öyle ama aslında denemedim (yorumuma bakın kod parçacığını seçin). Ancak, sürümü parametrelerle de kullanabilirsiniz - bunu ikinci örnek olarak ekleyeceğim. –