.NET Core - System.Linq.Dynamic.Core Kütüphanesi Nedir? Nasıl Çalışır?
System.Linq.Dynamic.Core, LINQ sorgularını çalışma zamanında dinamik olarak oluşturmanıza ve uygulamanıza yardımcı olmak için kullanılan bir kütüphanedir. Bu kütüphane, LINQ sorgularını metin tabanlı olarak tanımlamanıza ve uygulamanıza olanak tanır. Bu sayede LINQ sorgularını kod yazmadan dinamik bir şekilde oluşturabilirsiniz.
Farkları ve nasıl çalıştığına dair örnek bir açıklama:
Örnek olarak, bir Entity Framework (EF) tablosundaki verileri filtrelemek istediğinizi düşünün. Standart bir LINQ sorgusu şu şekilde görünebilir:
var filteredData = dbContext.Orders.Where(o => o.OrderDate >= startDate && o.OrderDate <= endDate);
Ancak, System.Linq.Dynamic.Core kullanarak aynı sorguyu metin tabanlı olarak oluşturabilirsiniz:
var filteredData = dbContext.Orders.Where("OrderDate >= @0 && OrderDate <= @1", startDate, endDate);
Bu kütüphane, LINQ ifadelerini dizeler olarak ifade edilmiş sorgu ifadelerine dönüştürmek için kullanılır. Verilen dize ifadesi, LINQ ifadesini temsil eder ve çalışma zamanında oluşturulur. @0, @1, vb. gibi parametrelerle dinamik değerler ekleyebilirsiniz.
Bu yaklaşım, sorguların dinamik olarak oluşturulmasını sağlar ve sorgu mantığını kodunuzdan ayırmanıza olanak tanır. Özellikle filtreler veya sıralama gibi kullanıcı girdilerine dayalı dinamik sorgular oluşturmanız gerektiğinde kullanışlı olabilir.
Aşağıda System.Linq.Dynamic.Core kullanarak dinamik bir LINQ sorgusu oluşturmanın daha kapsamlı bir örneğini bulabilirsiniz.
using System;
using System.Linq;
using System.Linq.Dynamic.Core;
namespace DynamicLinqExample
{
class Program
{
static void Main(string[] args)
{
// Örnek veritabanı nesneleri oluşturuyoruz
var products = new[]
{
new { Id = 1, Name = "Product A", Price = 100 },
new { Id = 2, Name = "Product B", Price = 200 },
new { Id = 3, Name = "Product C", Price = 150 },
};
Console.Write("Enter a property name (Id, Name, Price): ");
string propertyName = Console.ReadLine();
Console.Write("Enter a comparison operator (>, <, ==): ");
string comparisonOperator = Console.ReadLine();
Console.Write("Enter a value for comparison: ");
string comparisonValue = Console.ReadLine();
// Kullanıcıdan alınan girdilere göre dinamik bir LINQ sorgusu oluşturuluyor
var dynamicQuery = products.AsQueryable()
.Where($"{propertyName} {comparisonOperator} @0", comparisonValue);
// Oluşturulan sorgu sonuçları yazdırılıyor
foreach (var product in dynamicQuery)
{
Console.WriteLine($"Product: {product.Name}, Price: {product.Price}");
}
}
}
}
Bu örnekte, kullanıcıdan alınan girdilere göre dinamik bir LINQ sorgusu oluşturuluyor. Kullanıcı, özellik adını, karşılaştırma operatörünü ve karşılaştırma değerini girebilir. Örneğin, "Price > 150" gibi bir sorgu girdisi verildiğinde, System.Linq.Dynamic.Core kütüphanesi bu sorguyu oluşturup sonuçları filtreler.
Ancak, dinamik sorgu metinlerinin hatalara daha açık olabileceğini ve IntelliSense veya derleme zamanı denetimlerinin eksik olabileceğini unutmayın. Bu nedenle güvenlik ve hata denetimi açısından dikkatli olmanız önemlidir.