مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

sra.dd3

عضویت از 1399/09/15

جنریک کردن GetBy ها در لایه سرویس

  • پنجشنبه 19 فروردین 1400
  • 17:31
تشکر میکنم

سلام،

تو لایه سرویس هامون واسه هر کلاس معمولا این متود ها رو داریم:

GetByEmail، GetByUserName

و متن هر کدام شبیه هم است با تفاوت های کم:

return _user.SingleOrDefault(x=>x.Email == value)

return _user.SingleOrDefault(x=>x.UserName== value)

چطور میشه این کار رو به صورت یک متود درآورد،

یعنی در اصل SingleOrDefault یک Expression<Func<T, T >> میگیره من زیاد با Expression ها کار نکردم از دوستان کسی هست بگه چطور میشه یک Exprssion از جنس فانک رو از ورودی گرفت و به SingleOrDefault پاس داد ؟

ممنون.

پاسخ های این پرسش

تعداد پاسخ ها : 2 پاسخ
کاربر سایت

zarrinnegar

عضویت از 1395/10/24

  • جمعه 20 فروردین 1400
  • 19:15

متوجه منظورتون نشدم

نمیتونی متغییر به singleordefault پاس بدی 

یا میخوای چند تا متد رو تو یک متد داشته باشی 

یا یک متد بسازی چند تا حالت و کار کنه

 

ولی برای گرفتن یک کاربر از روی ایمیل یا نام کاربری من این کار و میکنم تو یک متد

public class GetUser(string Value)

{

return _user.where(p=> p.Email == Value || p.UserName == Value).SingleOrDefault();

}

کاربر سایت

sra.dd3

عضویت از 1399/09/15

  • شنبه 21 فروردین 1400
  • 02:22

ممنون، روش شما هم جواب میده ولی به نظرم این روشی که پیدا کردم بهتر جواب میده:

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();
}
کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)