Я использую EF. и шаблон хранилища.
Конкретный вопрос заключается в том, как я могу написать приведенное ниже GetPositionByCustomExpression, чтобы из вызывающей стороны я мог передать выражение, иногда выражение может содержать один фильтр или 2 или даже выражение может содержать порядок?
public interface IPositionRepository
{
void CreateNewPosition(Position contactToCreate);
void DeletePosition(int id);
Position GetPositionByID(int id);
IEnumerable<Position> GetAllPositions();
int SaveChanges();
IEnumerable<Position> GetPositionByCustomExpression(); //---> What to put here??
}
public class PositionRepository : IPositionRepository
{
private HRContext _db = new HRContext();
public Position GetPositionByID(int id)
{
return _db.Positions.FirstOrDefault(d => d.PositionID == id);
}
public IEnumerable<Position> GetAllPosition()
{
return _db.Positions.ToList();
}
public void CreateNewContact(Position positionToCreate)
{
_db.Positions.Add(positionToCreate);
_db.SaveChanges();
}
public int SaveChanges()
{
return _db.SaveChanges();
}
public void DeletePosition(int id)
{
var posToDel = GetPositionByID(id);
_db.Positions.Remove(posToDel);
_db.SaveChanges();
}
/// <summary>
/// Lets suppose we have a field called name, another years of experience, and another department.
/// How can I create a generic way in ONE simple method to allow the caller of this method to pass
/// 1, 2 or 3 parameters.
/// </summary>
/// <returns></returns>
public IEnumerable<Position> GetPositionByCustomExpression() // --> What to put here?
{
_db.Positions.Find(); // ---> and here??
}