{РЕДАКТИРОВАТЬ - Ответ был отмечен как правильный, поскольку поведение было предоставлено, но технически не отвечало на вопрос}
Чтобы ответить на вопрос: «Как добавить несколько аргументов в лямбда-выражение в C# ", важно понимать, что в этом случае лямбда-выражение преобразуется в тип делегата, определенный как параметр для методов linq, таких как Where()
и Any()
. Следовательно, лямда должна соответствовать «сигнатуре» типа делегата, которая определяет его параметры и возвращаемое значение. В большинстве случаев методы linq ожидают делегата с именем Predicate
, определенным как delegate bool Predicate<in T>(T obj)
. Таким образом, преобразованная лямбда должна получить один параметр типа T
, являющийся типом элемента Enumerable
, и вернуть одно логическое значение.
Таким образом, вы не можете добавлять аргументы в лямбда выражение, которое необходимо преобразовать в делегатов, именно тип делегата определяет параметры и тип возвращаемого значения. Лямбда с "несколькими аргументами" может выглядеть так, в соответствии с подписью делегата divide
, два int
вход, один double
выход:
Func<int, int, double> divide = (x, y) => { return x / y; };
Чтобы обеспечить запрошенное поведение, альтернативный подход, который вы можете рассмотреть:
(у меня нет ваших моделей для тестирования, поэтому рассмотрите этот псевдо, но, глядя на свой запрос, вы можете попробовать что-то вроде ...)
var DisplayBook = (from book in TblBook
from bookStatus in TblBookStatus
from user in TblUser
where (book.BookId == bookStatus.BookId) && (user.UserId == currentReader) && (user.UserId == bookStatus.ReservedBy)
select book).FirstOrDefault();