بیایید 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 خاص آن پایگاه داده پایبند باشید.