Tôi đang cố gắng tạo động một cây biểu thức trong C#, được biên dịch và được sử dụng làm vị từ cho lời gọi LINQ-to-SQL Where(). Vấn đề là tôi đang cố gắng so sánh một Enum (với int là kiểu cơ bản của nó) trực tiếp chống lại một Int, nhưng điều này không thành công với lỗi "Thành viên MyEnumType không có bản dịch được hỗ trợ cho SQL".Làm cách nào để chuyển đổi một Enum thành Int để sử dụng trong một hoạt động Expression.Equals?
Code:
ParameterExpression param = Expression.Parameter(typeof(MyClass), "obj"); //input parameter - this exposes a property of the Enum type
MemberExpression enumMember = Expression.Property(param, "MyEnumProperty"); //used to get the Enum typed property from the parameter
//MISSING STEP TO CAST THE ENUM OF THE MEMBER EXPRESSION TO AN INT?
BinaryExpression binaryExpr = Expression.Equal(enumMember, Expression.Constant(1));
LambdaExpression<Func<MyClass, bool>> whereClause = Expression.Lambda(binaryExpr, param);
//when whereClause is used to filter LINQ-to-SQL results, the error is thrown
Tôi khá mới để cây biểu hiện và tôi không thể hình này ra. Tôi đã thử sử dụng
Expression.Convert(enumMember, typeof(int))
làm phần đầu tiên của BinaryExpression nhưng điều này không khắc phục được.
Bất kỳ trợ giúp nào được đánh giá cao.
này không có ý tưởng về làm thế nào để nhận được giá trị của enum trong cây biểu –
Sau khi một số digging hơn, tôi đã quyết định rằng vấn đề ở đây là với sự hiểu biết của tôi LINQ-to-SQL hơn với biểu thức chính nó. Thuộc tính Enum trên đối tượng thực thể của tôi không thực sự là một cột trong cơ sở dữ liệu; Tôi nghĩ rằng đây là lý do tại sao nó không thể dịch nó sang một mệnh đề where. Tôi sẽ thực hiện một cách tiếp cận khác nhưng nếu có ai có bất kỳ thông tin chi tiết nào, hãy chia sẻ. –
Bạn cũng có thể cung cấp mã cho MyClass không? Mã bạn hiện đang có trong bài đăng khá sôi nổi, không nhiều để kể từ đây ... – code4life