Linq to sql Linq到Sql问题

Linq to sql Linq到Sql问题,linq-to-sql,Linq To Sql,无法强制转换类型为的对象时将出现错误 公共类CusInfomration { 公共字符串CustomerName{get;set;} 公共字符串CustomerID{get;set;} 公共字符串OrderDate{get;set;} 公共字符串OrderId{get;set;} } var CustomerFromWash=来自_NorthWindDataContext.Customers中的p 在NorthWindDataContext.Orders中加入q p.CustomerID等于q.

无法强制转换类型为的对象时将出现错误

公共类CusInfomration
{
公共字符串CustomerName{get;set;}
公共字符串CustomerID{get;set;}
公共字符串OrderDate{get;set;}
公共字符串OrderId{get;set;}
}
var CustomerFromWash=来自_NorthWindDataContext.Customers中的p
在NorthWindDataContext.Orders中加入q
p.CustomerID等于q.CustomerID
其中p.Region==“WA”
选择新的
{                                                   
CustomerName=Convert.ToString(p.CompanyName),
CustomerID=Convert.ToString(p.CustomerID),
OrderId=Convert.ToString(q.OrderId),
OrderDate=Convert.ToString(q.OrderDate),
};
List lstCust=(List)CustomerFromWash;

LINQ查询返回一个
IQueryable
IQueryable
是一个接口,
List
没有实现它,因此底层的具体实现不可能是一个
List
(但是它实现了
IEnumerable
,因此对它的转换是有效的)。即使是这样,这也不是一个安全的转换,因为.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
}

该LINQ查询返回一个
IQueryable
IQueryable
是一个接口,
List
没有实现它,因此底层的具体实现不可能是一个
List
(但是它实现了
IEnumerable
,因此对它的转换是有效的)。即使是这样,这也不是一个安全的转换,因为.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
}