2011-09-10 17 views
0

それは私にエラーが発生しますタイプのオブジェクトをキャストできません。Linq 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 
}