2011-01-05 33 views
8

Bất kỳ cơ thể nào có thể cho tôi biết làm thế nào tôi có thể quản lý toán tử LIKE bằng cách sử dụng API biểu thức động của microsoft?Thư viện động (System.Linq.Dynamic) hỗ trợ LIKE Operator như thế nào?

tôi cần phải thêm nhiều hơn một Giống như Expression trong động của tôi, nơi truy vấn

/* 
var query = 
db.Customers. 
Where("CityName Like @0 or CityName Like @1", "London", "USA") 
*/ 
var query = 
db.Customers. 
Where("CityName Like @0 or CityName Like @1%", "London", "USA") 

nhờ heaps

Trả lời

16

Hãy thử sử dụng chỉ đơn giản là "CityName.Contains (@ 1)" điều này sẽ chuyển đổi thành lambda thích hợp kể từ khi nó được gọi phương thức trên một kiểu có thể truy cập.

cái gì đó như:

var query = 
db.Customers. 
Where("CityName.Contains(@0) or CityName.Contains(@1)", "London", "USA") 

Chỉ cần thử nghiệm nó với các ứng dụng mẫu mà đi kèm với các thư viện năng động và nó tạo ra các nhà điều hành NHƯ

+0

cảm ơn người đàn ông, u cứu mạng của tôi :) – Soren

3

Chỉ cần thêm nhiều nơi khoản

var query = db.Customers.Where(c=>c.CityName.contains("London")); 
query = query.Where(c=>c.CityName.contains("USA")); 
query = query.Where(c=>c.CityName.contains("Johannesburg")); 

nhưng các truy vấn trên sẽ tạo nó:

select * from khách hàng nơi CityName như "london" CityName như "USA" vv ...

bạn muốn

select * from khách hàng nơi CityName như " london "hoặc Tên thành phố như " Hoa Kỳ "v.v ...

Để sử dụng động tạo hoặc báo cáo bạn có thể sử dụng predicatebuilder có thực sự alot chức năng đó mà bạn có thể sử dụng ...

http://www.albahari.com/nutshell/predicatebuilder.aspx

var predicate = PredicateBuilder.False<Customer>(); 
predicate = predicate.Or(c=>c.CityName.Contains("London")); 
predicate = predicate.Or(c=>c.CityName.Contains("USA")); 
predicate = predicate.Or(c=>c.CityName.Contains("Johannesburg")); 
+0

Tôi cần sử dụng biểu thức động để tôi phải chuyển tiêu chí dưới dạng chuỗi – Kiarash

+0

Xin lỗi không hoàn toàn chắc chắn những gì bạn cần nhưng kiểm tra chỉnh sửa – Gaven

+0

nhờ Gavan và xin lỗi vì sự hiểu lầm, tôi chỉ cần thêm trường động vào mệnh đề where as string nhìn: Ở đâu ("Tên thành phố Giống như @ 0 hoặc CityName Like @ 1", "London", "USA") có các trường trong chuỗi và có thể được tạo động nhưng không phải trường hợp trong ví dụ của bạn. nhưng cảm ơn cho công ty của bạn – Kiarash

2

Bạn có thể sử dụng .StartsWith(),.EndsWith().Contains() mà sẽ tạo ra THÍCH SQL với dấu, hàng đầu và các ký tự đại diện xung quanh tương ứng. Không biết cách tạo một câu lệnh với một ký tự đại diện được nhúng.

0

bạn có thể thử này.

IList<string> keyword = new List<string>() { "London", "USA", "Johannesburg" }; 
      var query = db.Customers.Where(c => keyword.Contains(c.CityName)); 
+0

Tôi thích thủ thuật của bạn nhưng không phải là câu trả lời đúng cos tôi cần phải chọn động tên trường của tôi từ chuỗi Vì vậy, nhờ bạn đời. – Kiarash

2

@Jaime đó là những gì tôi cần, cảm ơn.

var truy vấn = db.Customers. đâu ("CityName.Contains (@ 0) hoặc CityName.Contains (@ 1)", "London", "Hoa Kỳ")

+1

hoặc nếu bạn muốn kết quả bắt đầu hoặc kết thúc, như sau: var query = db.Customers. Vị trí ("CityName.EndsWith (@ 0) hoặc CityName.StartsWith (@ 1)", "London", "USA") –

2

này sẽ chăm sóc của việc sử dụng "Like" trên các lĩnh vực số nguyên ...

.Where (searchField + "ToString(). Chứa (@ 0)", searchString);

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