В чем проблема приведения по моему запросу - PullRequest
0 голосов
/ 05 апреля 2011

Работа над C # vs2008.my ниже запрос показывает мне ошибку. Может ли кто-нибудь тело сказать мне, в чем проблема и как решить эту проблему. Спасибо заранее.

 NorthwindDataContext db = new NorthwindDataContext();
 List<Order> r = (from p in db.Orders
                  select new { p.OrderID, p.OrderDate });

Сообщение об ошибке:

Невозможно неявно преобразовать тип 'System.Linq.IQueryable' в 'System.Collections.Generic.List. Явное преобразование существует (вы пропустил актерский состав?)

Ответы [ 3 ]

7 голосов
/ 05 апреля 2011

Вы пытаетесь назначить выражение запроса для объекта List<>. Это неправильно.

Вам нужно позвонить ToList(), чтобы преобразовать результаты запроса в список найденных заказов и использовать анонимный тип, поскольку вы выбираете только частичные данные и создаете новые анонимные объекты:

var r = (from p in db.Orders
         select new { p.OrderID, p.OrderDate }).ToList();

Обратите внимание, что анонимный тип по-прежнему будет перечисляемым, поскольку он по-прежнему является общим List<>, и поэтому он по-прежнему реализует общий интерфейс IEnumerable<>.

Чтобы сформировать List<Order>, вам нужно либо получить законченные объекты, поэтому вместо этого select p, как сказал Джон Раш:

List<Order> r = (from p in db.Orders
                 select p).ToList();

Или select new Order s и создайте их из выбранных вами полей.

0 голосов
/ 05 апреля 2011

Или, в зависимости от того, что вы будете делать с этим запросом позже, сохраните его как IQueryable (который позволит вам дополнительно фильтровать и запрашивать на сервере без получения всех заказов), выполнив:

using (var context = new NorthwindDataContext())
{
  var allOrders = from p in db.Orders
               select new { p.OrderID, p.OrderDate };

  // Here you can do further processing (to be executed in DB)
  var someOrders = allOrders.Where(ao => ao.OrderDate < DateTime.Today.AddDays(-1));
  Console.WriteLine(someOrders.Count()); // <-- Query will execute here
}
0 голосов
/ 05 апреля 2011
 NorthwindDataContext db = new NorthwindDataContext();
        List<Order> r = (from p in db.Orders
                 select p).ToList();

Выбор new {...} создает новый экземпляр анонимного типа. Если вы хотите выбрать Order, вам придется возвращать заказы по вашему запросу. Наконец, вы должны вызвать ToList (), потому что запросы Linq возвращают IEnumberable<T>.

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