سلام،
تو لایه سرویس هامون واسه هر کلاس معمولا این متود ها رو داریم:
GetByEmail، GetByUserName
و متن هر کدام شبیه هم است با تفاوت های کم:
return _user.SingleOrDefault(x=>x.Email == value)
return _user.SingleOrDefault(x=>x.UserName== value)
چطور میشه این کار رو به صورت یک متود درآورد،
یعنی در اصل SingleOrDefault یک Expression<Func<T, T >> میگیره من زیاد با Expression ها کار نکردم از دوستان کسی هست بگه چطور میشه یک Exprssion از جنس فانک رو از ورودی گرفت و به SingleOrDefault پاس داد ؟
ممنون.
متوجه منظورتون نشدم
نمیتونی متغییر به singleordefault پاس بدی
یا میخوای چند تا متد رو تو یک متد داشته باشی
یا یک متد بسازی چند تا حالت و کار کنه
ولی برای گرفتن یک کاربر از روی ایمیل یا نام کاربری من این کار و میکنم تو یک متد
public class GetUser(string Value)
{
return _user.where(p=> p.Email == Value || p.UserName == Value).SingleOrDefault();
}
ممنون، روش شما هم جواب میده ولی به نظرم این روشی که پیدا کردم بهتر جواب میده:
private readonly DbContext _db;
private readonly DbSet<TEntity> _dbSet;
public Repository(DbContext db)
{
_db = db;
_dbSet = _db.Set<TEntity>();
}
public IEnumberable<TEntity> Get(Expression<Func<TEntity, bool>> where)
{
IQueryable<TEntity> query = _dbSet;
if (where is not null)
query = query.Where(where);
if (orderBy is not null)
query = query.OrderBy(orderBy);
return query.ToList();
}
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)