Есть общий репозиторий, работает нормально. Репозиторий получил 2 конструктора:
private IDbSet<T> mDbSet;
private Expression<Func<T, bool>> mPredicate;
...
public Repository()
{
mDbSet = mDb.Set<T>();
mPredicate = null;
}
public Repository(Expression<Func<T, bool>> predicate)
{
mDbSet = mDb.Set<T>();
mPredicate = predicate;
}
Второй для предоставления «стандартного» фильтра для элементов в репозитории. Фильтр применяется как к выходу, так и к входу. Таким образом, функция Add нуждается в проверке, соответствует ли элемент предикату. Как это сделать. Не компилируется следующее:
public virtual void Add(ref T item)
{
if (mPredicate != null)
{
List<T> chkList = new List<T>() { item };
if (chkList.FirstOrDefault(mPredicate) == null)
{
throw new AppExcpetion("Add non-matching element.");
}
}
mDbSet.Add(item);
}
FirstOrDefault отлично работает для нестандартных списков. Но, возможно, мне не нужен список, чтобы проверить соответствие элемента предикату. Заранее благодарю за любую помощь!