سلام
استاد من دوره core مقدماتی پیشرفته شما رو گذروندم. استاد من میخوام کامنت های دیلیت شده رو نشون بدم وقتی where میزنم روش 0 برمیگردونه با این که کامنت isDelete true هم دارم تو database
مشکل کد ef ام کجاست؟
public ShowCommentUsersForAdminViewModel GetRemovedCommentByAdminSearch(int pageId = 1, string filter = "")
{
//lazy load enable with IQueryable
IQueryable<BlogComment> result = _context.BlogComments
.Include(c => c.Blog)
.Include(c => c.User);
if (!string.IsNullOrEmpty(filter))
{
result = result.Where(u => u.Comment.Contains(filter) || u.User.UserName.Contains(filter) || u.Blog.BlogTitle.Contains(filter));
}
//show Item In Page
int take = 10;
int skip = (pageId - 1) * take;
ShowCommentUsersForAdminViewModel list = new ShowCommentUsersForAdminViewModel();
list.CurrentPage = pageId;
list.PageCount = (result.Count() / take) + 1;
list.BlogComments = result.Where(c => c.IsDelete).OrderBy(u => u.CreateDateComment).Skip(skip).Take(take).ToList();
return list;
}
سلام
دیباگ کنید پیدا میشه
استاد دیباگ گردم فقط در انتها عدد 0 رو نمایش میده. شما بفرمایید این where رو کجا باید بزارم؟ انتها همون جایی که هست یا خیر؟ اون بالا
به نظر درسته
تهش .tolist بزارید و تست کنید
اگر ته بالا رو میفرمایید که طبق فرمایش خودتون از lazzy در میاد و به بانک فشار میاد . اگر پایین میفرمایید که .tolist داره انتهاش. منظورتون اینه اینطوری بزنم؟
list.BlogComments = result.Where(c => c.IsDelete).ToList().OrderBy(u => u.CreateDateComment).Skip(skip).Take(take).ToList();
سلام دوست عزیز
جهت دیباگ کردن پشت این دستور یه Tolist() بزارید :
result = result.Where(u => u.Comment.Contains(filter) || u.User.UserName.Contains(filter) || u.Blog.BlogTitle.Contains(filter));
اگر دیدید تا اینجای کار دیتا برنمیگردونه پس این شرط هاتون مشکل داره، اما اگه اینجا تعدادش بیشتر از 0 بود اما توی کوئری آخر که دارید ViewModel خودتون رو مقداردهی میکنید تعدادش صفر هست احتمالا بخاطر اینه که توی DbContext خودتون روی جدولتون QueryFilter اعمال کردید ! برای غیرفعال کردن QueryFilter هم قبل از ToList کردن از دستور ()IgnoreQueryFilters. استفاده کنید
موفق باشید