Dinamik olarak LINQ-to-SQL Where() çağrısı için bir derleme olarak kullanılan ve derlenen C# dilinde bir ifade ağacı oluşturmaya çalışıyorum. Sorun şu ki, bir Enum'u (temeldeki tür ile int) doğrudan bir Int ile karşılaştırmaya çalışıyorum, ancak bu, "MyEnumType üyesinin SQL'e desteklenen bir çevirisi yok" hatasıyla başarısız olması.Bir Expression.Equals işleminde kullanmak için Enum'u bir Int'e nasıl dönüştürebilirim?
Kodu:
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
Ben ifade ağaçlara oldukça yeni ve ben bu anlamaya olamaz. Ben BinaryExpression ilk parçası olarak
Expression.Convert(enumMember, typeof(int))
kullanarak denedi ama bu onu düzeltmez.
Herhangi bir yardım çok takdir edilmektedir.
biraz daha kazma sonra ifade ağaç –
yılında enum nasıl gidilir değeri hakkında hiçbir fikrim yok bulur, burada sorun benim anlayış LINQ SQL ziyade ile olduğuna karar verdik İfadenin kendisi ile. Varlık nesnesindeki Enum özelliği, aslında veritabanındaki bir sütun değil; Bence bu onu bir fıkraya tercüme edememesi. Farklı bir yaklaşıma gidiyorum ama eğer herhangi bir anlayış varsa, paylaşmaktan çekinmeyin. –
MyClass'ın kodunu da sağlayabilir misiniz? Şu anda yazdığınız kod oldukça boilerplate, buradan söyleyecek çok şey yok ... – code4life