IEnumerable <T>VS IList <T>VS IQueryable <T> - PullRequest
       48

IEnumerable <T>VS IList <T>VS IQueryable <T>

19 голосов
/ 30 августа 2010

Впервые на сцене MVC.net (и .net в этом отношении), но, похоже, я нахожу широкий спектр опций, когда хочу заполнить «список» данными.В моем случае на данный момент я хотел бы заполнить список из запроса на выборку элементов и отобразить результаты в формате JSON для вывода, так что терпите меня ....

Итак, мой класс viewmodelчто-то вроде:

[Serializable()]
public class TFSquery 
{
    public int MsgUid { get; set; }
    public DateTime CreateStamp { get; set; }    
}

А затем я хотел бы заполнить его выводом моего запроса:

List<TFSquery> z = (from msg in _DB.Msg 
                    select new { msg.MsgUID, msg.CreateStamp }).ToList();

Затем я бы зациклил вывод в моем Списке, чтобы затем мог вывестив моей строке возврата Json?И когда я использую LIST VS НЕИЗМЕННЫЙ VS IQUERYABLE ??

return Json(new { Result = z }, JsonRequestBehavior.AllowGet);     

Ответы [ 3 ]

33 голосов
/ 30 августа 2010

Мои эмпирические правила:

  • Используйте список, когда вам нужно добавить, удалить или ссылаться на элемент по индексу.

  • Используйте IQueryable, когда вам нужно выполнить специальные запросы к нему.

  • Используйте IEnumerable по умолчанию.

Похоже, вы уже выполняете запрос "в" своей базе данных, поэтому я бы предложил использовать простейшую версию: IEnumerable, чтобы просто иметь возможность циклически просматривать результаты.

10 голосов
/ 30 августа 2010

Если вы новичок в .NET и C #, я бы потратил некоторое время на изучение и понимание того, что представляют собой различные типы коллекций, как они отличаются и когда их использовать. Вы будете использовать коллекции так часто, что вы не сможете позволить себе иметь общее представление о «простом однострочнике», как и другие опубликованные авторы.

Вот хорошее руководство по типам коллекций .NET: http://msdn.microsoft.com/en-us/library/0ytkdh4s.aspx

IQueryable - это собственный особый зверь, заслуживающий отдельного гида: http://msdn.microsoft.com/en-us/library/system.linq.iqueryable.aspx

3 голосов
/ 30 августа 2010

Каждый интерфейс имеет собственный набор применений.

IQueryable предназначен для отложенных запросов (то есть он сохраняет запрос, но выполняет его только при перечислении)

IEnumerable может быть перечислени все.

В IList можно добавлять и удалять элементы.

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