Daha Genel ve Esnek Filtreleme için LINQ Kullanımı Örneği -1
Merhaba! Bugün, filtreleme işlemlerini daha esnek bir şekilde yapmanızı sağlayan bir yöntem paylaşacağım.
1)İlk olarak, paketimizi indiriyoruz.
“System.Linq.Dynamic.Core” adlı bir üçüncü taraf kütüphane indirmemiz gerekiyor. Bu kütüphane, dize ifadelerini LINQ ifadelerine dönüştürmek ve çalıştırmak için gerekli araçları sağlar.
Ayrıca, dışarıdan alacağımız expression
parametresi için bir tanımlama yapmamız gerekiyor. Örnek projenizdeki kullanım şekli aşağıdaki gibi olabilir:
3) String olarak alınan şartı Expression
türüne çevirmek için aşağıdaki gibi bir yöntem kullanabilirsiniz:
public static Expression<Func<T, bool>> ParseExpression<T>(string expression)
{
var parameter = Expression.Parameter(typeof(T));
var lambda = DynamicExpressionParser.ParseLambda(new[] { parameter }, typeof(bool), expression);
return (Expression<Func<T, bool>>)lambda;
}
4) Bu yapıyı kullanmak:
public async Task<List<Customer>> GetAllFilter(GetAllFilterCustomerQuery request)
{
var expression = ExpressionParser.ParseExpression<Customer>(request.Expression);
var query = _queryRepository.GetAll().Where(expression).Include(p => p.CustomerType).ToListAsync();
return result;
}
5) Örnek Kullanım
6)Response
Not : Performans gibi testler yapılmamıştır. Örnek teşkil etmesi için paylaşılmıştır. Ayrıca, performans testlerini gerçekleştirmeniz ve projenizin ihtiyaçlarına göre gerekli optimizasyonları yapmanız öneririm.
Tavsiyelerinize ve eleştirilerinize açığım. Teşekkürler.