Herkese selam,
Bugün göstereceğimiz örnekte string olarak kaydedilen formüllerimizin matematiksel olarak işlemlerini
nasıl yaptıracağımız olacaktır.
Örnek senaryomuz şu şekilde;
Master datamızda tanımlanan formülümüzün string olarak kaydedip,
bu değerimizi matematiksel ifadeye dönüştürüp sonucumuzu alacağız.
Çok fazla uzatmadan örneğe geçiyoruz.
İhtiyaçlar:
- .Net Core 2.1
- System.Linq.Dynamic.Core / Nuget
1) String olan formülümüzü alırız.(a ve b değerlerimizi parametre olarak biz gireceğiz.)
string formul = "(a+b)*0.95";
2) a ve b değerlerimizi alacağımız "ParameterExpression" tipinde iki alan tanımlarız null olarak.
ParameterExpression a = null;
ParameterExpression b = null;
3) Formülümüzde a ve b yerine gelecek değerlerimizi aşağıdaki şekilde set ederiz.Burda yapılan işlem formülde "a" değerinin int tipli olacağını belirtmemizdir.
Örnek olarak int yaptık.Siz decimal ve diğer tipleri kullanabilirsiniz.
a = Expression.Parameter(typeof(int), "a");
b = Expression.Parameter(typeof(int), "b");
4) string formülümüzde bulunan a ve b değerlerini belirttik.Aşağıda ise bu parametreleri formül üzerinde yerleşimini sağlarız.
LambdaExpression dynamicformul = DynamicExpressionParser.ParseLambda(new ParameterExpression[] { a,b }, null, formul);
5) Formülümüz dinamik olarak parmetrelerimize hazır hale geldi.Aşağıda ise "a" ve "b" değerlerini set edip sonuç alırız.
var compdeger = dynamicformul.Compile();
var sonuc = compdeger.DynamicInvoke(5,4);
sonuc=8.55
Sonuç:
String olan formülümüzün a ve b değerlerini parametre alacak şekilde düzenleyip,matematik işlemi halde sonucumuzu elde ettik.Bu tür işlemleri farklı yerde farklı şekilde kullanmak tamamiyle ihtiyacınıza ve hayal gücünüze kalıyor.
Okuduğunuz için teşekkürler.Kodun full halini aşağıda bulabilirsiniz.
FullCode:
string formul = "(a+b)*0.95";
ParameterExpression a = null;
ParameterExpression b = null;
a = Expression.Parameter(typeof(int), "a");
b = Expression.Parameter(typeof(int), "b");
LambdaExpression dynamicformul = DynamicExpressionParser.ParseLambda(new ParameterExpression[] { a,b }, null, formul);
var compdeger = dynamicformul.Compile();
var sonuc = compdeger.DynamicInvoke(5,4);
sonuc=8.55
Müzik Listesi:


