SQL-запрос LINQ 2 не работает с вызовом функции - PullRequest
3 голосов
/ 22 сентября 2010

Я вполне уверен, что этот вопрос уже задавался несколько раз, и я прошу прощения за то, что спросил его еще раз, но я провел небольшое исследование и, к сожалению, я не нашел своего удовольствия в Интернете ...

У меня есть IQueryable, как это:

triggers = triggers.Where(t => GetIdFromName(t.Name) == filter.Id.ToString());

Функция GetIdFromName получает часть имени для получения идентификатора:

public string GetIdProfiloFromName(string name)
        {
            return name.Substring(name.IndexOf(NameFirstSeparator)+1,name.IndexOf(NameSecondSeparator)-name.IndexOf(NameFirstSeparator)-1);
        }

Я знаю, что это не хорошо, но этолучшее, что я мог сделать до сих пор.Мой вопрос заключается в том, что использование Linq для SQL не допускается с помощью этих двух операторов.Приложение выдает ошибку, тогда как это нормально:

triggers = triggers.Where(t => t.Name.Substring(t.Name.IndexOf(NameFirstSeparator) + 1, t.Name.IndexOf(NameSecondSeparator) - t.Name.IndexOf(NameFirstSeparator) - 1) == filter.Id.ToString());

Я подозреваю, что функция GetIdFromName должна давать что-то отличное от строки, но мне действительно интересно, что и как ...

Спасибо за ваше просветление,

Йоанн

[ПРАВИТЬ] Обновление до того, что я понял до сих пор:

Я не могу делать то, что хотел, потому что для этого я хотел бынужно сделать что-то в этом роде:

static Expression<Func<Trigger,string,  bool>> IsId = (a,b) => a.name.Substring(a.name.IndexOf(NameFirstSeparator) + 1, a.name.IndexOf(NameSecondSeparator) - a.name.IndexOf(NameFirstSeparator) - 1)==b;

Но это не попадет в

triggers = triggers.Where(func<Trigger,bool>);

И я смог бы это сделать, но мне нужно было бы получить все результаты отмоя база данных для выполнения моего теста в памяти.

Большое спасибо всем, вы сделали это стало действительно ясным для меня !!

1 Ответ

5 голосов
/ 22 сентября 2010

LINQ 2 SQL преобразует ваш запрос в дерево выражений , а затем переводит это дерево выражений в SQL.Поскольку ваша пользовательская функция не имеет коррелированной функции SQL, она не знает, как ее перевести, и выдает исключение.

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