Linq Оценка метода как лямбда-выражения - PullRequest
3 голосов
/ 22 июля 2009

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

var result = from rangeVariable in DataSource
             where (rangeVariable => Foo.MethodReturnsBoolean(rangeVariable) == true)
             select rangeVariable;

Я получаю эту ошибку:

Невозможно преобразовать лямбда-выражение в тип 'bool', поскольку он не является типом делегата.

Кто-нибудь может объяснить, что происходит, и как мне этого добиться?

1 Ответ

18 голосов
/ 22 июля 2009

Вам не нужно лямбда-выражение в предложении «где» - перевод выражения запроса сделает это за вас. Просто используйте:

var result = from rangeVariable in DataSource
             where Foo.MethodReturnsBoolean(rangeVariable) == true
             select rangeVariable;

Я бы тогда лично удалил избыточность "== true" (я знаю, что это был только пример кода, но ...):

var result = from rangeVariable in DataSource
             where Foo.MethodReturnsBoolean(rangeVariable)
             select rangeVariable;

Тогда я бы подумал, что использование выражения запроса на самом деле покупает вас. Если вы просто делаете «где» (или просто «выбираете»), вы можете найти точечную запись проще:

var result = DataSource.Where(x => Foo.MethodReturnsBoolean(x));

Это становится еще лучше: компилятору не нужно выводить возвращаемое значение из лямбда-выражения (потому что оно всегда будет bool), поэтому вы можете просто использовать преобразование группы методов:

var result = DataSource.Where(Foo.MethodReturnsBoolean);

Насколько это чище? :)

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