2012-05-04 28 views
5

Dưới đây là câu hỏi của tôi:Lỗi với Entity Framework Bất cứ() lọc

var x = db 
    .Users 
    .Where(u => u.Locations.Any(l => searchedLocation.Counties.Any(c => c.LocationId == l.LocationId)); 

Bối cảnh:

  • UsersIQueryable<User>. (Bộ đối tượng EF)
  • searchedLocation là đối tượng Location.
  • CountiesICollection<MiniLocation>.

gì tôi đang cố gắng để làm:

Return tất cả người dùng, nơi mà bất kỳ Counties cho những địa điểm có một locationId của bất kỳ của các quận thuộc vị trí tìm kiếm.

Ví dụ:

Tìm kiếm thành phố New York (LocationId = 1. County1LocationId = 2)

User: Bob. Địa điểm: Soho. County1LocationId = 2. County2 LocationId = 3.

Vì vậy, đó là một kết quả phù hợp. (Vì Soho có County với một LocationId 2, và do đó, NYC)

Lỗi i nhận:

Không thể để tạo ra một giá trị không đổi của loại 'xxx.xxx.Locations.MiniLocation' . Chỉ các kiểu nguyên thủy ('như Int32, String và Guid') mới được hỗ trợ trong ngữ cảnh này.

Bất kỳ ý tưởng nào?

+0

Bạn có thử với .Join()? –

Trả lời

1

Điều này MSDN page tuyên bố rằng cấu trúc này không được hỗ trợ. Bạn có thể sử dụng this method cho .Net 3.5 Linq cho Thực thể để giúp thay thế việc sử dụng Any.

+0

Im trên .NET 4. Được rồi vì vậy tôi hiểu được lỗi, nhưng không phải là giải pháp được đề xuất trong liên kết mà bạn cung cấp. Bất kỳ lời khuyên/ví dụ nào khác? – RPM1984

0

Bạn cần xây dựng danh sách ID vị trí có thể được tìm kiếm.

var idsToSearch = "1,2,3,4,5...";  

Sau đó, bạn có thể sử dụng Contains theo cách sau:

var x = db 
     .Users 
     .Where(u => idsToSearch.Contains(u.LocationId)); 
+0

tôi không nghĩ điều đó đúng. trước hết, '.Contains' chỉ nhận' T' hoặc 'IEnumerable '. Thứ hai, điều đó sẽ chỉ khớp với bất kỳ vị trí nào trong số các hạt chứa id vị trí của vị trí được tìm kiếm, trong khi tôi muốn bất kỳ vị trí nào trong số các hạt có chứa bất kỳ vị trí nào trong số các vị trí được tìm kiếm. Phức tạp, tôi biết. :) – RPM1984

+0

Đã cập nhật ........ –