Linq To Sql Проблема - PullRequest
       0

Linq To Sql Проблема

0 голосов
/ 10 сентября 2011

выдаст ошибку. Невозможно привести объект типа .

  public class CusInfomration
   {
      public string CustomerName { get; set; }
      public string CustomerID { get; set; }
      public string OrderDate { get; set; }
      public string OrderId { get; set; }
   }

  var CustomerFromWash =  from p in _NorthWindDataContext.Customers
                          join q in _NorthWindDataContext.Orders 
                          on p.CustomerID   equals q.CustomerID
                          where p.Region == "WA"
                          select new
                         {                                                   
                             CustomerName =Convert.ToString(p.CompanyName),
                             CustomerID = Convert.ToString(p.CustomerID),
                             OrderId = Convert.ToString(q.OrderID),
                             OrderDate = Convert.ToString(q.OrderDate),
                          };

  List<cusinfomration> lstCust = (List<cusinfomration>)CustomerFromWash;
.

1 Ответ

4 голосов
/ 10 сентября 2011

Этот запрос LINQ возвращает IQueryable<T>. IQueryable<T> является интерфейсом, а List<T> не реализует его, поэтому нет никакой возможности, чтобы базовая конкретная реализация была List<T> (однако, она реализует IEnumerable<T>, поэтому приведение к нему было бы допустимым). Даже если это было бы небезопасно, так как пользователи .NET могут захотеть когда-нибудь изменить базовую реализацию, и ваш состав будет нарушен. Не очень хорошая идея, даже если это сработало изначально.

Вы можете позвонить ToList() на возвращаемое значение запроса LINQ:

var CustomerFromWash = (from p in _NorthWindDataContext.Customers
                        join q in _NorthWindDataContext.Orders 
                        on p.CustomerID   equals q.CustomerID
                        where p.Region == "WA"
                        select new
                        {                                                   
                           CustomerName =Convert.ToString(p.CompanyName),
                           CustomerID = Convert.ToString(p.CustomerID),
                           OrderId = Convert.ToString(q.OrderID),
                           OrderDate = Convert.ToString(q.OrderDate),
                        }).ToList();

Даже тогда, когда вы выбираете коллекцию анонимных типов, а не CustInformation объектов. Если вы хотите, чтобы CustInformation объекты были возвращены, вам нужно:

select new CustInformation 
{
    // set properties here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...