Tôi có một cấu trúc bảng đơn giản của dịch vụ với mỗi một số cơ sở. Trong cơ sở dữ liệu, đây là bảng Service
và bảng Facility
, trong đó bảng Facility
có tham chiếu đến một hàng trong bảng Dịch vụ.Tại sao sự kết hợp này của Select, Where và GroupBy gây ra một ngoại lệ?
Trong ứng dụng của chúng tôi, chúng tôi có LINQ làm việc tiếp theo:
Services
.Where(s => s.Facilities.Any(f => f.Name == "Sample"))
.GroupBy(s => s.Type)
.Select(g => new { Type = g.Key, Count = g.Count() })
Nhưng vì những lý do ngoài tầm kiểm soát của tôi, bộ nguồn dự kiến sẽ là một đối tượng phi thực thể trước khi Where
cuộc gọi, theo cách này:
Services
.Select(s => new { Id = s.Id, Type = s.Type, Facilities = s.Facilities })
.Where(s => s.Facilities.Any(f => f.Name == "Sample"))
.GroupBy(s => s.Type)
.Select(g => new { Type = g.Key, Count = g.Count() })
Nhưng điều này làm tăng ngoại lệ sau đây, không có ngoại lệ bên trong:
EntityCommandCompilationException: The nested query is not supported. Operation1='GroupBy' Operation2='MultiStreamNest'
Loại bỏ các Where
, tuy nhiên, làm cho nó hoạt động, mà làm cho tôi tin rằng đó là chỉ kết hợp cụ thể này của phương pháp gọi:
Services
.Select(s => new { Id = s.Id, Type = s.Type, Facilities = s.Facilities })
//.Where(s => s.Facilities.Any(f => f.Name == "Sample"))
.GroupBy(s => s.Type)
.Select(g => new { Type = g.Key, Count = g.Count() })
Có cách nào để làm cho công việc trên: chọn một phi thực thể và sau đó sử dụng Where
và GroupBy
trên kết quả có thể truy vấn? Thêm ToList
sau khi tác phẩm Select
hoạt động, nhưng tập hợp nguồn lớn làm cho điều này không khả thi (nó sẽ thực thi truy vấn trên cơ sở dữ liệu và sau đó thực hiện logic nhóm trong C#).
Và chúng tôi đang nói về cơ sở dữ liệu và phiên bản EF nào? –
SQL Server 2014 và khung thực thể 6.1.1! –
Làm cho phần câu hỏi này của [LINQ-to-entites của tôi! = LINQ-to-objects collection] (http://stackoverflow.com/a/13352779/861716). –