Создаешь свой класс, который и генерирует запрос по аналогии с паттерном Builder.
И на каждом этапе передаешь предыдущий сформированный IQueriable при необходимости.
class QueryBuilder
{
private IQueryable m_IQueryable;
//Создаем запрос в конструкторе
public QueryBuilder()
{
m_IQueryable = (from i in table select i);
}
//Добавляем условия
public void AddDate(DateTime timestamp)
{
m_IQueryable = m_IQueryable.Where(x => x.Timestamp == timestamp);
}
//Возвращает сформированый запрос
public IQueryable GetQuery()
{
return m_IQueryable;
}
}