#linq #entity-framework-4.1
#linq #entity-framework-4.1
Вопрос:
Я новичок в запросах LINQ и в EF тоже, я обычно работаю с MySQL и не могу догадаться, как писать действительно простые запросы.
Я хотел бы выбрать все результаты из таблицы. Итак, я использовал вот так:
ZXContainer db = new ZXContainer();
ViewBag.ZXproperties = db.ZXproperties.All();
Но я вижу, что мне нужно что-то написать внутри All (—).
Не мог бы кто-нибудь подсказать мне, как я мог это сделать? И если у кого-нибудь тоже есть хорошая ссылка для ссылок, я очень благодарен.
Ответ №1:
All()
выполняется ли логическая оценка для всех элементов в коллекции (хотя немедленно возвращает false, когда достигает элемента, где оценка false), например, вы хотите убедиться, что для всех указанных свойств ZX определенное поле установлено как true:
bool isTrue = db.ZXproperties.All(z => z.SomeFieldName == true);
Который будет принимать isTrue
значение true или false. LINQ обычно загружается с задержкой, поэтому, если вы вызываете db.ZXproperties
напрямую, у вас есть доступ ко всем объектам как есть, но это не совсем то, что вы ищете. Вы можете либо загрузить все объекты при присвоении переменной с помощью .ToList()
:
ViewBag.ZXproperties = db.ZXproperties.ToList();
или вы можете использовать приведенное ниже выражение:
ViewBag.ZXproperties = from s in db.ZXproperties
select s;
Что на самом деле ничем не отличается от высказывания:
ViewBag.ZXproperties = db.ZXproperties;
Преимущество .ToList()
в том, что если вы хотите выполнить несколько вызовов в этом ViewBag.ZXproperties, для этого потребуется только первоначальный вызов базы данных при назначении переменной. В качестве альтернативы, если вы выполняете какую-либо форму запрашиваемого действия над данными, например .Where()
, у вас будет выполнен другой запрос, что далеко не идеально, если у вас уже есть данные для работы.
Ответ №2:
Чтобы выбрать все, просто пропустите .All(...)
, поскольку ZXproperties allready — это коллекция.
ZXContainer db = new ZXContainer();
ViewBag.ZXproperties = db.ZXproperties;
Возможно, вам захочется (или иногда даже потребуется) вызвать .ToList()
эту коллекцию перед использованием…
Ответ №3:
Вы не используете все. Просто введите
ViewBag.ZXproperties = db.ZXproperties;
или
ViewBag.ZXproperties = db.ZXproperties.ToList();
Ответ №4:
Метод All используется для определения, соответствуют ли все элементы коллекции некоторому условию.
Если вам просто нужны все элементы, вы можете просто использовать это напрямую:
ViewBag.ZXproperties = db.ZXproperties;
Если вы хотите, чтобы это было оценено немедленно, вы можете преобразовать его в список:
ViewBag.ZXproperties = db.ZXproperties.ToList();
Это заставит его немедленно перенести по проводам.
Ответ №5:
Вы можете использовать это:
var result = db.ZXproperties.ToList();
Для получения дополнительной информации о linq см. 101 linq sample
.
Все — это некоторая проверка всех элементов и аргументов в нем, вызываемых lambda expression
.
Комментарии:
1. отрицательный ответ, вы должны объяснить, почему вы проголосовали против, поскольку я вижу, что вы отклонили мой ответ и ответ Рида Копси, оба ответа правильные, это не очень хороший способ сделать подобное.