2011-08-15 30 views
11

Tôi có một mô hình Nhóm miền với name, desc và thu users (thuộc nhóm)LINQ to Entities EF4

tôi đang cố gắng để có được tất cả các nhóm mà một người dùng cụ thể thuộc về. Đây là tuyên bố LINQ của tôi:

var results = from p in AuthorizationService.UnitOfWork.Groups.FindAll() 
          where 
           (p.Users != null && p.Users.Select(u => u.Id).Contains(CurrentUser.Id)) 
          select p.Name; 

tôi nhận được lỗi sau khi tôi cố gắng để thực hiện truy vấn

Cannot compare elements of type 'System.Collections.Generic.ICollection`1'. Only primitive types (such as Int32, String, and Guid) and entity types are supported. 

Bất kỳ sự giúp đỡ là appreciated.Thanks!

+0

Tại sao không thả điều khoản cuối cùng chứa và quấn mà vào lựa chọn của bạn? – Rig

+0

giàn khoan, bạn có thể chỉ cho tôi cách truy vấn sẽ như thế nào? – Lavan

Trả lời

14

Xóa thử nghiệm rỗng đối với đối tượng Người dùng, dù sao nó được tải chậm, người dùng của bạn có phải là ảo không? nếu nó là, nó là lười biếng-nạp, đó là ok để loại bỏ các thử nghiệm null sau đó

var results = 
from p in AuthorizationService.UnitOfWork.Groups.FindAll() 
where 
    p.Users.Any(u => u.Id == CurrentUser.Id) 
select p.Name; 
+0

Michael, nó ném cùng một lỗi – Lavan

+0

Michael, loại bỏ các thử nghiệm null thực sự làm việc. – Lavan

+0

Bạn đã thử xóa 'p.Users! = Null' chưa? –

0

Bạn không thể đi ngược lại?

var results = AuthorizationService.UnitOfWork.Users.Include("Groups").First(u => u.ID == CurrentUser.Id).Select(u => u.Groups); 

Hy vọng điều này sẽ hữu ích.

+0

cảm ơn anton, nhưng tôi không được phép thay đổi mô hình hiện tại. – Lavan

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