2012-01-12 34 views
8

Tôi đang sử dụng Mã khung thực thể trước tiên. Tôi muốn truy vấn entites từ cơ sở dữ liệu đối với các đối tượng List. Điều này làm việc tốt với chứa, nhưng làm thế nào tôi có thể kết hợp nó với StartsWith?Khuôn khổ thực thể 4.1 LINQ chứa và StartsWith

Đây là mã của tôi:

List<string> values = new List<string>(); 
values.Add("A"); 
values.Add("B"); 
context.Customer.Where(c => values.Contains(c.Name)).ToList(); 

Làm thế nào tôi có thể truy vấn đối với tất cả khách hàng mà bắt đầu với A hoặc B?

Trả lời

10

này nên làm việc trong bộ nhớ, nhưng tôi không chắc chắn nếu nó có thể được dịch sang SQL bởi EF:

context.Customer.Where(c => values.Any(s => c.Name.StartsWith(s))).ToList(); 
+0

fyi update đáng buồn với lõi ef này được đánh giá cục bộ cảnh báo: Microsoft.EntityFrameworkCore.Query [20500 ] Biểu thức LINQ 'trong đó {từ chuỗi văn bản trong __texts_0 trong đó [d] .Entry.StartsWith ([văn bản]) chọn [text] => Any()}' không thể dịch và sẽ được đánh giá cục bộ. –

+0

@AnthonyJohnston [Điều này có thể liên quan] (https://stackoverflow.com/a/44372562/335858) – dasblinkenlight

2

Bạn không cần phải kết hợp nó với StartsWith, vì nó bắt đầu bằng A hoặc B, sau đó nó chứa A hoặc B. Không thể bắt đầu bằng A hoặc B và không chứa A hoặc B.

Vì vậy, chỉ cần sử dụng StartsWith thay vì Chứa.

context.Customer.Where(c => c.StartsWith("A") || c.StartsWith("B")).ToList(); 
+0

Tôi không sử dụng String.Contains() nhưng List.Contains(). Giải pháp của bạn hoạt động nhưng không hoạt động. Ví dụ. truy vấn chống lại A-K. – LuckyStrike

+1

@LuckyStrike - Tôi sẽ đề nghị rằng nếu bạn có những yêu cầu như vậy, bạn đưa chúng vào câu hỏi của bạn. Nếu không, bạn chỉ lãng phí mọi thời gian bằng cách từ chối các giải pháp mà họ không thể biết được không phải là những gì bạn đang tìm kiếm. –

0

Bạn có thể thử kết hợp hai chức năng theo cách này:

IQueryable<Customer> result = (from C in context.Customerwhere C.Name.StartsWith("B") && values.Contains(C.Name)); 
+0

Bạn đang thiếu một khoảng trống trong từ C trong 'context.Customerwhere' nó phải từ C trong' context.Customer where' –

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