سلام من چند تا query دارم که به صورت IQueryable هستند ، اگر بخوام همین ها هر ۳ تا شون با یک درخواست و به صورت Async اجرا بشن چطوری میشه؟
:لبخند:
Printable View
سلام من چند تا query دارم که به صورت IQueryable هستند ، اگر بخوام همین ها هر ۳ تا شون با یک درخواست و به صورت Async اجرا بشن چطوری میشه؟
:لبخند:
از این درخواست ها در Action استفاده میشه یا کاربرد دیگری دارد؟
همه این کوئری ها در نهایت در یک ویو نمایش داده میشود؟
اگر همگی در یک اکشن متد هست که ساده هست کافیه اکشن بصورت async تغریف کنید و از یک ویومدل که شامل چند لیست هست برای ارسال همه کوئری ها به سمت ویو در اون اکشن بهره ببرید
و یک نکته چون IQueryable یک درخواست خام هست و به دیتابیس ارسال نشده جهت استفاده در نهایت باید تبدیل به یک Tolist شود
وقتی یکی یا همه این کوئری ها تبدیل به Tolist شود فقط یکی از این چند کوئری های شما میتواند به عنوان خروجی متد شما باشد
خیلی ممنون از پاسختون، در اکشن استفاده میشه
همه به یک ویو ارسال میشه
var model = new AdminWidgetModel(); model.ContactList = await db.Contacts.OrderByDescending(y => y.id).Where(y => y.Status == (int)ContactStatus.New).Select(x => new ContactWidgetModel { Message = x.Message, Subject = x.Subject, Time = x.Date }).Skip(0).Take(5).ToListAsync();
model.FactorList = await db.factors.OrderByDescending(y => y.id)
.Where(y => y.FactorStatus == (int)FactorStatus.PayedService || y.FactorStatus == (int)FactorStatus.UnRegisteredUserPayed || y.FactorStatus == (int)FactorStatus.LoginPayeWithoutWallet)
.Select(x => new FactorWidgetModel { Name = x.service_name, Price = x.price_total }).Skip(0).Take(5).ToListAsync();
model.TicketList = await db.Contacts.OrderByDescending(y => y.id).Where(y => y.Status == (int)TicketStatus.CustomerReplayed).Select(x => new TicketWidgetModel { Subject = x.Subject, Message = x.Message }).Skip(0).Take(5).ToListAsync();
return View(model);
۳ تا کوئری هست و خوب طبق چیزایی که من میدونم با ToList از حالت Queryable در میاد و میشه IEnumerable که اجرا میشه
راهی هست حالا این ۳ تا توی یک درخواست برن سمت سرور یعنی با یک Connection؟ یعنی این ۳ تا فقط یک کانکشن برقرار کنن:متفکر:
در این مثال شما که فقط یک کانکشن هست:متفکر:
اگر منظور شما اینه که سه تا کوئری ارسال نشه
شما چاره ای ندارید چون درخواست های شما هرکدام از جداول متفاوت هستند و نتایج مختلفی دارند
ولی اگر این هست ک 3 تا کانکشن به دیتابیس زده نشود این میتونه راه حل داشته باشه
بهترینش UnitOfWork هست