Сравнение дат в динамическом выражении «Где» в Linq дает исключение перегрузки - PullRequest
4 голосов
/ 15 ноября 2008

Я пытаюсь вставить динамическое предложение where в мой запрос Linq to SQL и получаю исключение перегрузки То же выражение работает при добавлении в собственно запросе?

 qry.Where(Function(c) c.CallDate < Date.Now.AddDays(-1))

Есть мысли о том, как это работает?

Исключение гласит:

Overload resolution failed because no accessible 'Where' can be called with these arguments:
Extension method 'Public Function Where(predicate As System.Func(Of Calls, Integer, Boolean)) As System.Collections.Generic.IEnumerable(Of Calls)' defined in 'System.Linq.Enumerable': Nested function does not have the same signature as delegate 'System.Func(Of Calls, Integer, Boolean)'.
Extension method 'Public Function Where(predicate As System.Func(Of Calls, Boolean)) As System.Collections.Generic.IEnumerable(Of Calls)' defined in 'System.Linq.Enumerable': Option Strict On disallows implicit conversions from 'Boolean?' to 'Boolean'.
Extension method 'Public Function Where(predicate As System.Linq.Expressions.Expression(Of System.Func(Of Calls, Integer, Boolean))) As System.Linq.IQueryable(Of Calls)' defined in 'System.Linq.Queryable': Nested function does not have the same signature as delegate 'System.Func(Of Calls, Integer, Boolean)'.
Extension method 'Public Function Where(predicate As System.Linq.Expressions.Expression(Of System.Func(Of Calls, Boolean))) As System.Linq.IQueryable(Of Calls)' defined in 'System.Linq.Queryable': Option Strict On disallows implicit conversions from 'Boolean?' to 'Boolean'.  C:\Projects\Test Projects\Encore\EncoreData.vb  59  9   Encore

Спасибо

Ответы [ 2 ]

3 голосов
/ 15 ноября 2008

Я нашел ответ ...

c.Calldate является обнуляемым типом, Date.Now не обнуляемый. Правильное выражение должно гласить:

qry.Where(Function(c) c.CallDate.Value > Date.Now.AddDays(-1))

Подсказка в исключении была:

disallows implicit conversions from 'Boolean?' to 'Boolean'

Обратите внимание на "?" после первого логического.

Спасибо, что заставили меня поближе взглянуть на сообщение об ошибке!

3 голосов
/ 15 ноября 2008

Просто беру здесь удар, еще не видел, но вот, пожалуйста.

Похоже, что ключевые части - это две строки из вашего исключения:

Вложенная функция не имеет такой же подпись в качестве делегата 'System.Func (Of Calls, Integer, Boolean) '.

запрещает неявные преобразования из "Boolean? в логическое значение.

Итак, ваша функция, которую вы создаете, похоже, имеет выход типа boolean? тогда как предложение where ожидает логическое значение. И система не может сделать неявное преобразование из логического? логическое значение из-за возможности нулевого значения.

Итак, вы можете попробовать написать свою функцию с явным преобразованием. Либо (логическое), либо Convert.ToBool.

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