В одной из книг по EntityFramework есть описание кода:
We created an object of the DbContext class:
ToDoDBEntities db = new ToDoDBEntities()
Retrieved an item by passing the key values, that is, using the Find function:
ToDo todo1 = db.ToDos.Find(id);
Retrieved an item by passing a non-key value using the FirstOrDefault function:
ToDo todo2 = db.ToDos.SingleOrDefault(item => item.TodoItem == "Test item");
Retrieved an item by passing a non-key value using the SingleOrDefault function:
ToDo todo2 = db.ToDos.SingleOrDefault(item => item.TodoItem == "Test item");
Вопрос, откуда берется параметр item
в лямбда? item => item.TodoItem ==
"Test item");
Ведь мы его нигде не объявляли.
Дело в том, что при переборе списка будет вызываться Ваша лямбда-функция, которой будет передаваться параметр item
(название может быть любым) - это элемент списка в текущей итерации. А потом в теле лямбда-функции можно, используя этот параметр, обратиться к элементу в текущей итерации перебора списка и выполнить какое-либо действие.
Конкретно в этом случае, мы в SingleOrDefault
передаём функцию, которая проверяет равен ли элемент заданному условию item.TodoItem == "Test item"
и данная лямбда функция возвращает результат этого условия как свой результат.
Это выражение можно представить себе следующим образом, но так делать неправильно, так как у Вас выгрузятся все записи на клиент, вариант с лямбда внутри работает по другому!
Ваша лямбда функция это как метод:
public bool Compare(ToDo item)
{
return item.TodoItem == "Test item";
}
А Ваш вызов SingleOrDefault
, вызов метода в который мы передаём другой метод, для сравнения объектов:
ToDo result = db.ToDos.SingleOrDefault(Compare);
Вы его объявляли. Посмотрите внимательнее на вот эту запись:
item => item.TodoItem == "Test item"
В левой части лямбда-выражения объявляется параметр item
. В данном случае его тип определяется компилятором автоматически, но можно его задать и вручную:
(ToDo item) => ...
Имя для параметра можно выбирать произвольно (точнее, есть одно ограничение: имя параметра не может совпадать с именем локальной переменной).
В правой части лямбда-выражения используется параметр, объявленный в левой части.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как взаимодействовать с скриптом на сайте через программу (вызывать определенные функции, click)Подскажите как это реализовать