Bir meslektaşım tarafından yazılmış bazı ifade ağacı kodları üzerinde çalışıyorum ve ek ifadeler ekleme olasılığını araştırıyorum. Şu anda destekler: eşittir, eşit olmayan, IsNull vb. SQL "Like" komutuna benzer bir joker karşılaştırma kullanmasına veya normal ifadeler kullanmasına izin verecek bir şey eklemem gerekir. Şu anda kod bir XML dosyasını ayrıştırmakta ve daha sonra aşağıda gösterilen çizgiye benzer bir kod kullanılarak işlenen verileri ayıklamaktadır. Bu “Eşit” ifadesinin bir örneğidir. “CallExp” tablonun (Varlıklar) alan adını temel olarak tutan bir GetExpression ve GetConstantExpression karşılaştırdığım verilerle ilgili ayrıntıları alır.SQL "Beğen" komutuna benzer bir şey yapmak için bir İfade Ağacı nasıl oluşturulur
xRet = Expression.MakeBinary(ExpressionType.Equal, callExp, GetConstantExpression(element.Element("Value"), callExp.Type));
Ne Peşinde olduğum “Beğen” komutuna benzer bir “İfade” oluşturmak için bir yoldur. Bu, yukarıdakine benzer birkaç çizgi kullanılarak yapılabilir mi yoksa bu daha karmaşık mı olacak? Bu alanda yardımcı olabilecek iyi kaynaklar var mı?
================================= ====================================
görüşleri doğrultusundaYeni kod:
Bazı örneklere bakıyordum ve bana bir İfade yaratacağını umduğum aşağıdakileri denedim. Bana aşağıda gösterilen hatayı veriyor. “StartsWith” ifadesi oluşturmak için doğru yönde mi gidiyorum? _entityExp, MyClass'a bir ParameterExpression referansıdır.
ParameterExpression p = Expression.Parameter(_entityExp.Type, "entity");
MethodInfo method = typeof(string).GetMethod("StartsWith", new[] { typeof(string) });
var containsMethodExp = Expression.Call(p, method, Expression.Constant("root"), p);
Yöntemi 'Boole startswith (System.string)' tür 'System.string' ilan
"StartsWith" çalışmalarına devam etmeye karar verdim. Yukarıdaki kodu düzenledim ama bir hata alıyorum. Bununla doğru yönde mi gidiyorum? – Retrocoder
@Retrocoder: Hayır, hata oldukça doğru. String.StartsWith (string) 'i çağırmaya çalışıyor ancak dize olmayan bir argüman sağlıyorsunuz. Ya argümanı bir dize olarak değiştirmelisiniz ya da ihtiyacınız olan imzayla kendi 'StartsWith' yönteminizi yazmalısınız. –