如何将匿名类型强制转换为IQueryable
本文关键字:IQueryable Order Detail 转换 类型 | 更新日期: 2023-09-27 18:15:15
我正在创建一个OData
服务方法,我在其中编写了以下代码:
[WebGet]
public IQueryable<Order_Detail> getByYear(int year)
{
var dc = new NorthwindBigEntities();
var query = from p in dc.Order_Details
where p.Order.OrderDate != null && p.Order.OrderDate.Value.Year == year
select new
{
TotalSales = p.UnitPrice * p.Quantity,
Product = p.Product.ProductName
};
return query;
}
但是我得到了一个异常:
不能隐式转换类型'System.Linq.IQueryable AnonymousType#1'到'System.Linq.IQueryable CustomMethod.Order_Detail'.
我怎样才能做到这一点?
代替select new
做select p
。当前您选择的是匿名对象,无法将其转换为System.Linq.IQueryable CustomMethod.Order_Detail
你不能投射到Order_Detail
,因为它似乎是一个框架类。由于您正在匿名对象中进行计算,您可以通过select p
返回IQueryable<Order_Detail>
并稍后在LINQ上对对象进行计算,或者您可以创建一个新类并对其进行项目。如果你最终创建了一个新类,那么你应该根据类名修改你的签名。
public IQueryable<Order_Detail> getByYear(int year)
{
var dc = new NorthwindBigEntities();
var query = from p in dc.Order_Details
where p.Order.OrderDate != null && p.Order.OrderDate.Value.Year == year
select p;
return query;
}
如果你创建一个新的类:
public class MyClass
{
public string Product {get;set;}
public double TotalSales {get;set;}
}
然后你可以做
public IQueryable<MyClass> getByYear(int year)
{
var dc = new NorthwindBigEntities();
var query = from p in dc.Order_Details
where p.Order.OrderDate != null && p.Order.OrderDate.Value.Year == year
select new MyClass
{
TotalSales = p.UnitPrice * p.Quantity,
Product = p.Product.ProductName
};
return query;
}
考虑到是一个返回数据的服务,最好创建自己的类并只返回所需的属性。您还应该看到这个问题