Giriş
Şu satırı dahil ederiz.
Şöyle yaparız.
Şöyle yaparız.
Aritmetik metod olarak kullanılır. Şöyle yaparız.
Variable metodu
İsmi ve tipi belirtilen bir değişken yaratır.
Şu satırı dahil ederiz.
using System.Linq.Expressions;
ConstructorŞöyle yaparız.
public class C<TSource, TDest> where TDest : new() {
public Expression<Func<TSource, TDest>> Foo() => model => new TDest();
}
Body AlanıŞöyle yaparız.
Expression<Func<IEnumerable<T>>> expression = ...;
var member = (MemberExpression)expression.Body;
Call Metodu
Bu nesneyi Linq ile kullanabiliriz.
MethodInfo containsMethod = typeof(string).GetMethod("Contains");
MemberExpression member = ...;
Expression.Call(member, containsMethod,Expression.Convert(constant,member.Type));
Örnek
Elimizde şöyle bir nesne olsun.
Elimizde şöyle bir nesne olsun.
Expression<Func<T, bool>>
var exp = new Expression<Func<T, bool>> ...;
employees = new ObservableCollection<Employee>(EMP.AsQueryable().Where(exp)
Compile metodu
Derleyip çalıştırmak için şöyle yaparız.
Factory metod olarak kullanılır. Başka bir nesne üretir.
Örnek
Şöyle yaparız.
ÖrnekŞöyle yaparız.
var par1 = 100;
var par2 = 200;
var par3 = 300;
Expression<Func<int, int, int, int>> expr = (a, b, c) => (a + b) / c;
Func<int, int, int, int> func = expr.Compile();
int result = func(par1, par2, par3);
Derleyip çalıştırmak için şöyle yaparız.
Expression<Func<IEnumerable<T>>> expression = ...;
IEnumerable<T> value = expression.Compile()();
Şu kod ile aynıdır.Func<IEnumerable<T>> del = expression.Compile();
IEnumerable<T> value = del();
Constant metoduobject con;
ConstantExpression constant = Expression.Constant(con);
Equal metoduAritmetik metod olarak kullanılır. Şöyle yaparız.
MemberExpression member = ...;
ConstantExpression constant = ...;
Expression.Equal(member,Expression.Convert(constant, member.Type));
GreaterThan ve GreaterThanOrEqual metodları
Aritmetik metod olarak kullanılır. Şöyle yaparız.
Aritmetik metod olarak kullanılır. Şöyle yaparız.
Expression.GreaterThan(member,Expression.Convert(constant, member.Type));
veExpression.GreaterThanOrEqual
(member,Expression.Convert(constant, member.Type));
LessThan ve LessThanOrEqual metodları
Aritmetik metod olarak kullanılır. Şöyle yaparız.
Aritmetik metod olarak kullanılır. Şöyle yaparız.
Expression.LessThan(member,Expression.Convert(constant, member.Type));
veExpression.LessThanOrEqual
(member,Expression.Convert(constant, member.Type));
NodeType Alanı
Parameter metodu yazısına taşıdım.
Elimizde bir nesne olsun.
Expression<Func<int, string>> pred = ...
Eğer bu nesne lambda ile doldurulmuşsa şöyle yaparız.if (pred.NodeType == ExpressionType.Lambda) {...}
Parameter metodu
ToString metodu
Şöyle yaparız.
Expression<Func<int, int, int, int>> expr = (a, b, c) => (a + b) / c;
string exprAsText = expr.ToString();
İsmi ve tipi belirtilen bir değişken yaratır.
var temp1 = Expression.Variable(typeof(string), "temp1");
Bu değişkene değer atamayıp bir sabitten büyük olduğunu şöyle kodlarız.//use int.Parse(string) here
var parseMethod = typeof(int).GetMethod("Parse", new[] { typeof(string) });
var gt = Expression.GreaterThan(Expression.Call(parseMethod, temp1),
Expression.Constant(1));
Hiç yorum yok:
Yorum Gönder