I have a DAL class full of LINQ queries which I would like to improve as I found that I'm repeating myself couple of times.
As you can see the part below is repeated couple of times and I was wondering if it is possible to reduce the number of repetitions (passing the query somehow?) and/or improve the queries overall.
.Where(x => x.Active == true && x.Variable.Active == true && x.Variable.Question.Active == true)
private DashboardEntities db;
public AnswerSelectLabelRepository(DashboardEntities _db)
{
this.db = _db;
}
public AnswerSelectLabel GetById(string idAnswerSelectLabel)
{
return db.AnswerSelectLabel.Find(idAnswerSelectLabel);
}
public IEnumerable<AnswerSelectLabel> GetAll()
{
return db.AnswerSelectLabel
.Where(x => x.Active == true && x.Variable.Active == true && x.Variable.Question.Active == true)
.OrderBy(x => x.DisplayOrder)
.ThenBy(x => x.Value);
}
public IEnumerable<AnswerSelectLabel> GetByVariable(string idVariable)
{
return GetAll().Where(x => x.idVariable == idVariable);
}
public IEnumerable<AnswerSelectLabel> GetByVariable(IEnumerable<Respondent> respondents, string idVariable)
{
return respondents.SelectMany(x => x.AnswerSelect)
.Select(x => x.AnswerSelectLabel)
.Where(x => x.Active == true && x.Variable.Active == true && x.Variable.Question.Active == true)
.Where(x => x.idVariable == idVariable);
}
public IEnumerable<AnswerSelectLabel> GetByQuestion(string idQuestion)
{
return GetAll().Where(x => x.Variable.idQuestion == idQuestion);
}
public IEnumerable<AnswerSelectLabel> GetByQuestion(IEnumerable<Respondent> respondents, string idQuestion)
{
return respondents.SelectMany(x => x.AnswerSelect)
.Select(x => x.AnswerSelectLabel)
.Where(x => x.Active == true && x.Variable.Active == true && x.Variable.Question.Active == true)
.Where(x => x.Variable.idQuestion == idQuestion);
}