Я пытаюсь написать набор функций фильтрации, которые можно объединить в цепочку для постепенной фильтрации набора данных. Хитрость в том, что я хочу иметь возможность определять фильтры в другом контексте, нежели тот, в котором они будут использоваться. Я дошел до того, что смог передать очень базовую функцию предложению Where () в операторе LINQ:
файл фильтров:
Func<item, bool> returnTrue = (i) => true;
файл репозитория:
public IQueryable<item> getItems()
{
return DataContext.Items.Where(returnTrue);
}
Это работает. Однако, как только я пытаюсь использовать более сложную логику, начинается проблема:
файл фильтров:
Func<item, bool> isAssignedToUser = (i) => i.assignedUserId == userId;
файл репозитория:
public IQueryable<item> getItemsAssignedToUser(int userId)
{
return DataContext.Items.Where(isAssignedToUser);
}
Это даже не будет построено, потому что userId не находится в той же области, что и isAssignedToUser (). Я также попытался объявить функцию, которая принимает userId в качестве параметра:
Func<item, int, bool> isAssignedToUser = (i, userId) => i.assignedUserId == userId;
Проблема в том, что она не соответствует сигнатуре функции, которую ожидает Where ():
Func<item, bool>
Должен быть способ сделать это, но я не знаю, как это сделать. Я не чувствую, что объясняю это очень хорошо, но, надеюсь, вы понимаете суть.
Спасибо
Daniel