• 1397/08/05

ارسال سلکتور به GenericRepositories :

سلام و عرض ادب فراوان

قبلا سوالی پرسیده بودم اما دقت نکرده بودم که در قسمت نظرات نباید سوال بپرسیم(عذر خواهم)

سوالم اینه که چطوری میشه توی GenericRepositories به متد Get که توی آموزش کدنویسی کردید بیام نام ستونهایی که میخوایم رو ارسال کنیم.خیلی پیش میاد که از یه جدول مثلا ما فقط آیدی و مثلا نام و نام خانوادگی شخص رو لازم داریم نه بیشتر

اگه میشه این رو راهنمایی کنید

پیشاپیش سپاس از بررسی و پاسخ شما

  • 1397/08/05
  • ساعت 16:36

سلام 

این مورد رو با Linq نمیشه پیاده سازی کرد که دانیامیک خروجی بگیرید 

میتونید از Dapper برای این بخش ها استفاده کنید 


  • 1397/08/06
  • ساعت 12:09

سلام مجدد و ممنون بابت پاسختون

اگه بخواهیم از روشی که فرمودید استفاده کنیم برای زمانی خوبه که ما میدونیم مثلا قراره همیشه ستون های خاصی رو نشون بدیم

اما اگه قرار باشه مثلا در فرم جستجو مشتریان 5 تا فیلد ها

در فرم جستجوی سریع 3 تا از فیلدها و به همین ترتیب در جاهای دیگه تعداد فیلدها متفاوت باشه که سخته روش پیشنهادی شما استفاده کرد

یعنی واقعا مثل اون قسمت Where و Order by نمیشه اسامی فیلدها رو مشخص کرد؟

توی نت زیاد سرچ کردم و یه چیزی توی متد Get اضافه کرده بود به نام Selector که میشد نام فیلدها رو مشخص کرد مثل نمونه زیر

IEnumerable<TEntity> Get(Expression<Func<TEntity, bool>> where = null,

             Expression<Func<T,TResult>> selector = null,
            Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null);
اما بنده متوجه نشدم بحای عبارت TResult دقیقا چی رو بزارم
اینو میتونید راهنمایی کنید؟

  • 1397/08/06
  • ساعت 15:28

میتونید برای اینجور مواقع کوئری Sql اسجاد کنید و where رو داینامیک پر کنید و با EF روی بانک اجراکنید 

ولی در خروجی به مشکل میخورید که میتونید از یه نوع ViewModel باشه شامل فیلدهای مورد نظر 

کوئری داینامیک است ولی خروجی که یکسان است 


  • 1397/08/09
  • ساعت 09:53

سلام و وقت بخیر مجدد

اینم کدی که میخواستم با دستورات LINQ اینجا قرار میدم واسه دوستانی که مثل من دنبالش بودند

این خط کد تعریفش هست
 

IEnumerable<TResult> Get<TResult>(Expression<Func<TEntity, TResult>> selector,
            int skip = 0, int top = 0,
            Expression<Func<TEntity, bool>> where = null,
            Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
            string includes = null);

حالا دیگه میتونیم خروجی دلخواه رو بگیریم

منتها selector رو نشد که پیشفرض null بدم واسه همین متد فوق رو یبار با selector و یبار هم بدون selector نوشتم که هردو حالت رو داشته باشم

اینم نمونه فراخوانی تابع فوق

var myData=unitOfWork.CustomerR.Get(s=>new{s.CustomerId,s.FirstName,s.LastName,...});

سپاس فراوان از TopLearn


logo-samandehi