2010-10-12 18 views
28

Jak mogę wykonać zapytanie LIKE w Linq?Jak wykonać zapytanie LIKE z linq?

Mam następujące zapytanie, które chciałbym wykonać.

var results = from c in db.costumers 
       where c.FullName LIKE "%"+FirstName+"%,"+LastName 
       select c; 

Odpowiedz

29

Można użyć SqlMethods.Like(matchExpression,pattern)

var results = from c in db.costumers 
       where SqlMethods.Like(c.FullName, "%"+FirstName+"%,"+LastName) 
       select c; 

Wykorzystanie tej metody poza LINQ to SQL będzie zawsze rzucić wyjątek NotSupportedException.

+0

Nie miałem czasu na małpowanie z tym: gdzie SqlMethods.Like (s.Email, id + "%"), że przez błąd (tak, mam za pomocą System.Data.Linq.SqlClient;, zmieniłem na gdzie s.Email.Contains (id), nawet jeśli to nie to samo, mogę sprawić, by działał z zamianą na EndsWith –

26

Spróbuj użyć string.Contains() w połączeniu z EndsWith.

var results = from c in db.Customers 
       where c.FullName.Contains (FirstName) && c.FullName.EndsWith (LastName) 
       select c; 
+0

Wolę to od SqlMethods –

+2

W przeciwieństwie do zapytania 'like', nie ma znaczenia wielkość liter. –

+0

To zapytanie jest tłumaczone na instrukcję SQL LIKE, jeśli używa się Entity Framework, więc jej rozróżnianie wielkości liter zależy od sortowania kolumny/tabeli/db. –

2
where c.FullName.Contains("string") 
1

Można użyć zawiera:

string[] example = { "sample1", "sample2" }; 
var result = (from c in example where c.Contains("2") select c); 
// returns only sample2 
11

Spróbuj jak to

var results = db.costumers.Where(X=>X.FullName.Contains(FirstName)&&(X=>X.FullName.EndsWith(LastName)) 
          .Select(X=>X); 
+3

Dlaczego nie używać operatora "&&", zamiast podwójnej klauzuli Where? – Max

+0

@MaxMommersteeg: Thanks, Updated –

+0

@max Dlaczego nie 2 gdzie klauzula? Jeśli każda klauzula 'where' jest na osobnej linii, to czyni kod bardziej czytelnym, jeśli istnieje wiele długich warunków. – Phil1970

3
String [] obj = (from c in db.Contacts 
          where c.FirstName.StartsWith(prefixText) 
          select c.FirstName).ToArray(); 
      return obj; 

startswith() i endswith() może pomóc partii tutaj. Jeśli chcesz znaleźć dane pomiędzy polami, możesz użyć Contains().

0

var StudentList = dbContext.Students.SqlQuery("Select * from Students where Email like '%gmail%'").ToList<Student>();

Użytkownik może korzystać z tego podobnego zapytania w Linq i wypełnić model studencki.

+0

Skłonny do iniekcji SQL, jeśli dane wejściowe pochodzą od użytkownika ... – Phil1970