Filtrelenebilir BindingList from this source oluşturdu. Bu büyük çalışır:Nasıl Like için bir System.Linq.Expressions.Expression oluşturulur?
list.Filter("Customer == 'Name'");
ne olması gerektiği yapar. Dahili, ==
veya !=
ifadesini System.Linq.Expressions.Expression
içine dönüştüren bir ayrıştırıcı gibi çalışır. Bu durumda, ==
, System.Linq.Expressions.Expression.Equal
olur.
System.Linq.Expressions.Expression
, benzer bir işleç içermiyor ve bunu nasıl çözeceğimi bilmiyorum.
ilk kod şuna benzer:
private static System.Linq.Expressions.Expression<Func<String, String, bool>>
Like_Lambda = (item, search) => item.ToLower().Contains(search.ToLower());
private static Func<String, String, bool> Like = Like_Lambda.Compile();
örn:
private static Dictionary<String, Func<Expression, Expression, Expression>>
binaryOpFactory = new Dictionary<String, Func<Expression, Expression, Expression>>();
static Init() {
binaryOpFactory.Add("==", Expression.Equal);
binaryOpFactory.Add(">", Expression.GreaterThan);
binaryOpFactory.Add("<", Expression.LessThan);
binaryOpFactory.Add(">=", Expression.GreaterThanOrEqual);
binaryOpFactory.Add("<=", Expression.LessThanOrEqual);
binaryOpFactory.Add("!=", Expression.NotEqual);
binaryOpFactory.Add("&&", Expression.And);
binaryOpFactory.Add("||", Expression.Or);
}
Sonra ben istediğimi yapacağım bir ifade yarattı
Func<Expression, Expression, Expression>
önceden tanımlanmış ifadeleri
tam olarak bu gibi görünüyor:Console.WriteLine(like("McDonalds", "donAld")); // true
Console.WriteLine(like("McDonalds", "King")); // false
Ama binaryOpFactory
bunu gerektirir
System.Linq.Expressions.Expression.Or;
kimse nasıl benim ifadesini dönüştürmek için bana söyleyebilir misiniz? gibi
Ve nasıl GİBİ çalışır? Bir İfadeyi oluşturmana yardım edebilirim, ama önce nasıl çalışmasını istediğimi anlamalıyım ... regex? içeriyor? vb? –
Bu önemli değil. Nihai uygulama, regexp ile mümkün olacaktır. Temel olarak, bir Func 'a 2 Strings'i geçtim ve getiri değeri olarak doğru ya da yanlış aldım. Benim Sorunum, System.Linq.Expressions.Expression Ad Alanı içindeki Object'lerin uygulanmasını anlamam, çünkü Func <İfade, İfade, İfade> gibi görünüyor (binaryOpFactory genel tür argümanlarına bakın). kendi karşılaştırmam. –
Yorum yap: İfade API'sinin anlaşılması biraz zaman alabilir ... Blogumda birkaç temel bilgiyi incelemeye çalışıyorum; Jon'un kitabı (Derinlik C#) ayrıca yüksek düzeyde bir genel bakış sunar. –