Vì vậy, tôi có một thực thể có thuộc tính điều hướng có loại có phân cấp lớp. (Tên tổ chức thay đổi để bảo vệ tội)Entity Framework - truy vấn chỉ định loại được thừa kế cho thuộc tính điều hướng
class ParentEntity
{
virtual ChildEntity TheProperty { get; set; }
virtual string AnotherProperty { get; set; }
virtual string AnotherProperty2 { get; set; }
}
class ChildEntity
{
}
class ChildSubEntity : ChildEntity
{
virtual string InterestingProperty { get; set; }
}
Làm thế nào tôi có thể truy vấn cho các tổ chức ParentClass, với một trong những điều kiện truy vấn của tôi là nơi TheProperty là loại ChildSubClass và InterestingProperty có một giá trị cụ thể không?
Tôi đã thử
ObjectContext context = GetContext();
var result = context.ParentEntities.
Where(e => e.AnotherProperty == AnotherInterestingValue).
Where(e => e.TheProperty is ChildSubEntity).
Where(e => ((ChildSubEntity)e.TheProperty).
InterestingProperty == InterestingValue).
ToList();
Và nhận được lỗi "Unable to cast kiểu 'ChildEntity' gõ 'ChildSubEntity'. LINQ to Entities chỉ hỗ trợ đúc mẫu Entity Data loại nguyên thủy.".
Tôi phải giải quyết để làm phẳng danh sách và áp dụng điều kiện này sau khi dữ liệu đã được truy xuất từ cửa hàng thực thể. Có thể viết điều kiện này dưới dạng LINQ to Entities sẽ chấp nhận không? Để rõ ràng, đây là đơn giản hóa, tôi thực sự áp dụng một số điều kiện theo lập trình, xây dựng biểu thức truy vấn bằng cách sử dụng LinqKit, với một số điều kiện là thuộc tính của ParentEntity, một số trên ParentEntity và một số khác các thực thể con của ParentEntity.
Câu trả lời hay. Tuy nhiên tôi có nhiều tiêu chí khác về ParentEntity cần được đáp ứng, tôi sẽ chỉnh sửa câu hỏi để làm rõ điều đó. – SamStephens
Chỉ cần thêm 'Where' trong' SelectMany' để lọc 'ParentEntity' –
Ồ, giờ đây * là * thú vị. Tôi sẽ chơi và quay lại với bạn. – SamStephens