У меня проблемы со смешиванием функций c # с условиями в Linq-To-SQL
предположим, у меня есть таблица "вещи" в базе данных и локальная функция c #: bool isGood (thing, params)
Я хочу использовать эту функцию для выбора строк из таблицы.
var bad = dataContext.Things.Where(t=>t.type=mytype && !isGood(t,myparams))
dataContect.Things.deleteAllOnSubmit(bad);
или
if (dataContext.Things.Any(t=>t.type=mytype && isGood(t,myparams)))
{
return false;
}
Конечно, это не работает, Linq не может перевести мою функцию воператор SQL.Таким образом, это приведет к:
NotSupportedException: метод 'Boolean isGood (thing, params)' не имеет поддерживаемого перевода в SQL.
Каков наилучший способ изменить его, чтобы он работал?
Я могу разделить операторы и преобразовать их в список следующим образом:
List<Things> mythings dataContext.Things.Where(t=>t.type=mytype).toList()
if (mythings.Any(t=>isGood(t,myparams)))
{
return false;
}
это работает, но кажется неэффективным, поскольку весь список должен генерироваться в каждом случае.И я не думаю, что могу сделать deleteAllOnSubmit с результатом
Я мог бы сделать foreach по мифам вместо вызова toList (), что также работает.Хотя это выглядит не элегантно.
Какие еще варианты у меня есть, и какой подход рекомендуется использовать здесь?
edit:
с вызовом asEnumerable ()кажется, другой вариант, и, кажется, лучше, чем toList () по крайней мере.Т.е.
dataContext.Things.Where(t=>t.type=mytype).asEnumerable().Any(t=>isGood(t,myparams))