بیایید LINQ (پرس و جوی یکپارچه زبان) را با Entity Framework Core (EF Core) بررسی کنیم! LINQ یک زبان پرس و جو قدرتمند است که می توانید از آن برای جستجوی داده ها از منابع داده های مختلف از جمله پایگاه های داده استفاده کنید. در اینجا برخی از جنبه ها و مثال های کلیدی برای کمک به شما برای شروع آورده شده است:
پرس و جوهای اساسی LINQ
برای بازیابی داده ها می توانید با برخی از پرس و جوهای اساسی LINQ شروع کنید:
using (var context = new YourDbContext())
{
var products = context.Products.ToList();
}
فیلتر کردن داده ها
using (var context = new YourDbContext())
{
var expensiveProducts = context.Products
.Where(p => p.Price > 100)
.ToList();
}
مرتب سازی داده ها
می توانید داده ها را با استفاده از OrderBy، OrderByDescending، ThenBy و ThenByDescending مرتب کنید:
using (var context = new YourDbContext())
{
var sortedProducts = context.Products
.OrderBy(p => p.Name)
.ThenByDescending(p => p.Price)
.ToList();
}
انتخاب فیلدهای خاص
برای انتخاب فیلدهای خاص، می توانید از عبارت Select استفاده کنید:
using (var context = new YourDbContext())
{
var productNames = context.Products
.Select(p => p.Name)
.ToList();
}
پیوند جداول
میتوانید دادهها را از چندین جدول به هم پیوند دهید:
using (var context = new YourDbContext())
{
var query = from p in context.Products
join c in context.Categories on p.CategoryId equals c.CategoryId
select new { p.Name, CategoryName = c.Name };
var productCategories = query.ToList();
}
گروه بندی داده ها
برای گروه بندی داده ها، می توانید از عبارت GroupBy استفاده کنید:
using (var context = new YourDbContext())
{
var groupedProducts = context.Products
.GroupBy(p => p.CategoryId)
.Select(g => new { CategoryId = g.Key, Products = g.ToList() })
.ToList();
}
داده های محاسباتی
می توانید از روش های مختلف تجمیع مانند Count, Sum, Average, Min, و Max استفاده کنید:
using (var context = new YourDbContext())
{
var totalProducts = context.Products.Count();
var averagePrice = context.Products.Average(p => p.Price);
}
پرس و جوهای ناهمزمان
EF Core از عملیات ناهمزمان پشتیبانی می کند، که برای بهبود پاسخگویی برنامه شما ضروری است:
using (var context = new YourDbContext())
{
var products = await context.Products.ToListAsync();
}
واکشی داده های مرتبط با Including
using (var context = new YourDbContext())
{
var orders = context.Orders
.Include(o => o.OrderItems)
.ThenInclude(oi => oi.Product)
.ToList();
}
حالا بیایید به جستجوهای SQL خام در EF Core بپردازیم! هنگامی که قابلیت های LINQ EF Core کاملاً نیازهای شما را برآورده نمی کند، پرس و جوهای خام SQL جایگزین قدرتمند و انعطاف پذیری را ارائه می دهند. در اینجا یک راهنمای سریع برای شروع شما آورده شده است:
پرس و جو اولیه خام SQL
می توانید از روش های FromSqlRaw یا FromSqlInterpolated برای اجرای پرس و جوهای SQL خام که انواع موجودیت را برمی گرداند استفاده کنید:
using (var context = new YourDbContext())
{
var products = context.Products
.FromSqlRaw("SELECT * FROM Products")
.ToList();
}
پرس و جوهای پارامتردار
برای جلوگیری از حملات تزریق SQL، همیشه از پرس و جوهای پارامتری استفاده کنید:
var productId = 1;
using (var context = new YourDbContext())
{
var product = context.Products
.FromSqlInterpolated($"SELECT * FROM Products WHERE ProductId = {productId}")
.FirstOrDefault();
}
اجرای رویه های ذخیره شده
همچنین می توانید رویه های ذخیره شده را اجرا کنید:
using (var context = new YourDbContext())
{
var products = context.Products
.FromSqlRaw("EXEC GetProducts")
.ToList();
}
پرس و جوهای Non-Entity
گاهی اوقات لازم است پرس و جوهایی را اجرا کنید که به یک نوع موجودیت نگاشت نمی شوند. می توانید از متد Database.ExecuteSqlRaw برای این سناریوها استفاده کنید:
using (var context = new YourDbContext())
{
var rowsAffected = context.Database.ExecuteSqlRaw(
"UPDATE Products SET Price = Price * 1.1 WHERE Category = 'Electronics'"
);
}
SQL خام برای پرس و جوهای پیچیده
اگر پرس و جوهای پیچیده تری دارید، SQL خام بسیار مفید است. در اینجا مثالی از اتصال دو جدول آورده شده است:
using (var context = new YourDbContext())
{
var query = @"
SELECT p.ProductName, c.CategoryName
FROM Products p
JOIN Categories c ON p.CategoryId = c.CategoryId
";
var result = context.Products
.FromSqlRaw(query)
.ToList();
}
ترکیب کوئری خام با Including
همچنین می توانید داده های مرتبط را با استفاده از پرس و جوهای SQL خام اضافه کنید:
using (var context = new YourDbContext())
{
var orders = context.Orders
.FromSqlRaw("SELECT * FROM Orders")
.Include(o => o.OrderItems)
.ToList();
}
نکاتی برای استفاده از SQL خام در EF Core
- همیشه از پارامترها برای جلوگیری از حملات تزریق SQL استفاده کنید.
- از FromSqlRaw برای پرس و جوهای SQL خام و FromSqlInterpolated برای رشته های درون یابی شده استفاده کنید.
- اطمینان حاصل کنید که پرس و جوهای SQL خام شما با شکل موجودیت های شما مطابقت دارند.
- به نحو SQL مخصوص پایگاه داده توجه داشته باشید که ممکن است در ارائه دهندگان پایگاه داده مختلف قابل حمل نباشد.
پرس و جوهای SQL خام را می توان با پایگاه داده های مختلف در EF Core، مانند SQL Server، MySQL، و SQLite استفاده کرد. EF Core از ارائه دهندگان پایگاه داده مختلف پشتیبانی می کند و شما می توانید پرس و جوهای SQL خام را در برابر هر یک از آنها اجرا کنید، به شرطی که به گویش SQL خاص آن پایگاه داده پایبند باشید.