2012-07-13 43 views
7

Hãy nói rằng tôi có bảng Customers và tôi muốn lọc nó bằng cách sau:thực thể khuôn khổ: điều kiện lọc

  • Quốc gia: Tất cả, Mỹ, Anh, Canada
  • Thu nhập: All, thấp, cao, vừa
  • Tuổi: All, thiếu niên, người lớn, cao cấp

nếu tôi đã phải xây dựng một chuỗi SQL cho bộ lọc này, nó sẽ là một cái gì đó như thế này:

if (Country != "All") sql += "country = " + Country 
if (Income != "All") sql += "and income = " + Income 
if (Age != "All") sql += "and age = " + Age; 

Vì vậy, về cơ bản, người dùng có thể lọc theo một số, nhưng không cần thiết tất cả các trường.

Bạn làm điều này bằng cách sử dụng Khung thực thể như thế nào?

Cảm ơn!

+0

Đồng ý. Làm xong. Cảm ơn vi đa trả lơi. PS: Tôi cũng đến từ Minsk. – David

Trả lời

9

Bạn có thể bao gồm thông số điều kiện như sau:

return Customers.Where(
       customer => 
       customer.Name == Name && 
       (Age == "All" || customer.Age == Age) && 
       (Income == "All" || customer.Income == Income) && 
       (Country == "All" || customer.Country == Country) 
       ).ToList(); 

Nếu điều kiện là đúng (ví dụ nước bằng All), sau đó tất cả các điều kiện tham số trở thành sự thật, và tham số này không lọc kết quả.

17

LINQ để truy vấn Entity trở IQueryable 's, vì vậy bạn có thể xây dựng truy vấn của bạn theo cách này:

IQueryable<Person> query = context.People; 

if (Country != "All") 
{ 
    query = query.Where(p => p.Country == Country); 
} 

if (Income != "All") 
{ 
    query = query.Where(p => p.Income == Income); 
} 

if (Age != "All") 
{ 
    query = query.Where(p => p.Age == Age); 
} 

List<Person> fetchedPeople = query.ToList(); 

trường hợp này là gần như quá đơn giản, nhưng điều này là rất hữu ích trong những tình huống phức tạp hơn khi bạn cần phải thêm lọc động.

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