EF4.1 LINQ, выбирающий все результаты

#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. отрицательный ответ, вы должны объяснить, почему вы проголосовали против, поскольку я вижу, что вы отклонили мой ответ и ответ Рида Копси, оба ответа правильные, это не очень хороший способ сделать подобное.