باسلام
میخواستم بین دو جدول جوین بزنم و فقط یه سری رکورد با شرط مشخصی رو از جدول دوم بکشم بیرون
ولی هرچی مینویسم EF یا نمیذاره داخل Include شرط اعمال کنم یا اگه توی Select شرط رو اعمال کنم کل جدول دوم رو میکشه بیرون و آخرش سمت سی شارپ شرط رو اعمال میکنه و لیست میکنه.
در ضمن Lazy Loading هم خاموش هستش.
چطوری میشه Include شرط دار نوشت ؟!
using (var context = new BloggingContext()) { // Load all blogs and related posts var blogs1 = context.Blogs .Include(b => b.Posts) .ToList(); // Load one blogs and its related posts var blog1 = context.Blogs .Where(b => b.Name == "ADO.NET Blog") .Include(b => b.Posts) .FirstOrDefault(); // Load all blogs and related posts // using a string to specify the relationship var blogs2 = context.Blogs .Include("Posts") .ToList(); // Load one blog and its related posts // using a string to specify the relationship var blog2 = context.Blogs .Where(b => b.Name == "ADO.NET Blog") .Include("Posts") .FirstOrDefault(); }
using (var context = new BloggingContext()) { // Load all blogs, all related posts, and all related comments var blogs1 = context.Blogs .Include(b => b.Posts.Select(p => p.Comments)) .ToList(); // Load all users their related profiles, and related avatar var users1 = context.Users .Include(u => u.Profile.Avatar) .ToList(); // Load all blogs, all related posts, and all related comments // using a string to specify the relationships var blogs2 = context.Blogs .Include("Posts.Comments") .ToList(); // Load all users their related profiles, and related avatar // using a string to specify the relationships var users2 = context.Users .Include("Profile.Avatar") .ToList(); }
خب اینها که هیچ کدوم شرطی رو به جوینشون اضافه نکردن
مثلا تو این مثال
// Load one blogs and its related posts var blog1 = context.Blogs .Where(b => b.Name == "ADO.NET Blog") .Include(b => b.Posts) .FirstOrDefault();
بیاد اون پست هایی که رو بکشه بیرون که بین فلان بازه ی تاریخی ثبت شدند یا عنوانشون فلان کلمه ی کلیدی رو داره.
چطور میشه همچین حالتی رو نوشت ؟
من یکی نوشتم الان
اما مشکلش اینه نمیذاره به مدل اصلی cast کنمش و فقط anynomous برمیگردونه
var blog1 = dbContex.Blogs .Where(b => b.Name == "ADO.NET Blog") .Include(b => b.Posts) .Select(c => new { Posts = c.Posts.Where(d => d.Title == "My Title"), ... }) .ToList();
با پروفایلر هم چک کردم، کوئری درستی رو میفرسته سمت دیتابیس
اما چیکار کنم تا به مدل اصلی Cast بشه ؟
چون میخوام تو مخرن های DataAccess بنویسمش و لیستی از مدل اصلی رو برگردونم
با تشکر
باید از ViewModel برای خروجی استفاده کنید
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)