Можно ли использовать Func <entity>в методе Where для их горячей замены? - PullRequest
0 голосов
/ 19 сентября 2018

Я делаю фильтр горячей замены для своих сущностей, которые зависят от выбранного режима.Я хотел бы иметь возможность назвать что-то вроде

list.Where(e => Filter.Func(e)).ToList();

С этим

public class Filter() {
    public Func<CollectedDataRecord, bool> Func = (o) => true;
    //code that assigns other Func's depending on case
}

По сути это все.Но я получаю 'Тип узла выражения LINQ' Invoke 'не поддерживается в LINQ to Entities.'

Я видел этот вопрос Но я не получил решения.

Возможно ли, я должен сделать это по-другому.Может быть сделать таблицы функций в SQL?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Я думаю, что ваш Func будет выглядеть ниже

Func<listObjectType, bool> FilterFunc()
{
     Func<listObjectType, bool> s = delegate (listObjectType obj)
     {
           return obj == ""; //Here your code for comparison should go
     };
     return s;
}

list.Where(FilterFunc()).ToList();

или если у вас есть Func, доступный напрямую

Func<listObjectType, bool> s = delegate (listObjectType obj)
{
     return obj == ""; //Here your code for comparison should go
};

list.Where(s).ToList();
0 голосов
/ 19 сентября 2018

Если ваш метод Filter.Func(e) возвращает Expression<Func<T, bool>>, а не Func<T, bool> (так как вы используете EF), тогда вы сможете сделать следующее.

var predicate = Filter.Func(e);
list.Where(predicate).ToList();

Явное получениепредикат first заставляет EF не включать в выражение выполнение Filter.Func(e), которое EF не может обработать, поэтому вы получаете исключение, которое вы получаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...