سلام دوستان
امکانش هست کسی با توضیح کافی بفرمایند که چرا پارامتر دوم در تابع زیر
public virtual IEnumerable<TEntity> Get(Expression<Func<TEntity, bool>> filter = null, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null, string includes="") { IQueryable<TEntity> query = _dbSet; if (filter != null) { query = query.Where(filter); } foreach (string s in includes.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { query = query.Include(s); } if (orderBy != null) { query = orderBy(query); } return query; }
اولا وقتی قرار است فراخوانی شود به صورت زیر فراخوانی می شود
repository.Get(x => x.FirstName = "Bob",q => q.OrderBy(s => s.LastName));
ثاینا چرا در داخل تابع به صورت orderby(query) است ...یعنی ورودی گرفته است ...
مگر نه اینکه یک func است و توابعی از جنس ورودی و خروجی func که برای آن تعریف کرده ایم را می پذیرد ...چرا رفتار متفاوتی دارد ...در ضمن در داخل سی شارپ تابعی که IorderedQueryAlble باز گرداند فرمت زیر را دارد
public static IOrderedQueryable<TSource> OrderBy<TSource, TKey>( this IQueryable<TSource> source, Expression<Func<TSource, TKey>> keySelector )
خواهشمند است به تفضیل بفرمایید .... چون جستجو کردم و جواب قانع کننده نگرفتم ...ممنونم
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)