2010-10-12 92 views
28

Làm cách nào tôi có thể thực hiện truy vấn LIKE trong LINQ?Cách thực hiện truy vấn LIKE với LINQ?

Tôi có truy vấn sau đây tôi muốn thực thi.

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

Trả lời

29

Bạn có thể sử dụng SqlMethods.Like(matchExpression,pattern)

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

Việc sử dụng phương pháp này bên ngoài của LINQ to SQL sẽ luôn ném một ngoại lệ NotSupportedException.

+0

Tôi không có thời gian để khỉ xung quanh với điều này: nơi SqlMethods.Like (s.Email, id + "%") mà thông qua một lỗi (có tôi có sử dụng System.Data.Linq.SqlClient ;, tôi đã thay đổi để nơi s.Email.Contains (id) mặc dù điều đó không giống nhau, tôi có thể làm cho nó hoạt động với việc thay đổi thành EndsWith –

26

Hãy thử sử dụng chuỗi.Contains() kết hợp với EndsWith.

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

Tôi thích điều này hơn SqlMethods –

+2

Ngược lại với truy vấn 'thích', điều này không phân biệt chữ hoa chữ thường. –

+0

Truy vấn này được dịch sang câu lệnh SQL LIKE nếu sử dụng khung Entity, do đó, sự nhạy cảm của nó phụ thuộc vào sự đối chiếu của cột/bảng/db. –

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

Bạn có thể sử dụng bao gồm:

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

Hãy thử như

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

Tại sao không sử dụng toán tử '&&', thay vì mệnh đề Where ở đâu? – Max

+0

@MaxMommersteeg: Cảm ơn, Cập nhật –

+0

@max Tại sao không phải mệnh đề 2 where? Nếu mỗi mệnh đề 'where' nằm trên dòng riêng của nó, nó làm cho mã dễ đọc hơn nếu có nhiều điều kiện dài. – Phil1970

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

StartsWith này() và EndsWith() có thể giúp bạn rất nhiều ở đây. Nếu bạn muốn tìm dữ liệu ở giữa trường, thì Chứa() có thể được sử dụng.

0

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

Người dùng có thể sử dụng truy vấn này như thế nào trong LINQ và điền vào mô hình học sinh.

+0

Dễ bị tiêm SQL nếu đầu vào đến từ người dùng ... – Phil1970

Các vấn đề liên quan