2011-09-10 143 views
0

它會給我錯誤無法施展類型的對象。LINQ to SQL的問題

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; 

回答

4

該LINQ查詢返回一個IQueryable<T>IQueryable<T>是一個接口和List<T>沒有實現,所以沒有辦法底層,具體實施是List<T>(但它確實實現IEnumerable<T>,所以投地,這將是有效的)。即使是它不會是一個安全的投使作爲.NET人們可能希望有一天改變了底層的實現和你的施法將被打破。沒有哪怕沒有工作最初是一個好主意。

您可以在LINQ查詢的返回值調用ToList()

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 
}