如何投匿名类型的IQueryable< Order_Detail>在C#中? [英] how to cast an anonymous type to IQueryable<Order_Detail> in C#?
问题描述
我创建了一个 OData服务
方法,其中我已编写以下代码
[WebGet]
public IQueryable< Order_Detail> getByYear(int year)
{
var dc = new NorthwindBigEntities();
var query = from p in dc.Order_Details
其中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。
如何完成
$ <$> $ <$> $ <$>
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
其中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
其中p.Order.OrderDate!= null&& p.Order.OrderDate.Value.Year == year
select new MyClass
{
TotalSales = p.UnitPrice * p.Quantity,
Product = p.Product.ProductName
};
return query;
}
考虑它返回数据的服务,自己的类,并仅返回所需的属性。您还应该看到此问题
I am creating an OData service
method in which I have written following code
[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;
}
but I am getting an exception
Cannot implicitly convert type 'System.Linq.IQueryable AnonymousType#1' to 'System.Linq.IQueryable CustomMethod.Order_Detail'.
how can I accomplish this ??
Instead of select new
do select p
. Currently you are selecting anonymous object and you can't convert it to System.Linq.IQueryable CustomMethod.Order_Detail
You can't project to Order_Detail
since it appears to be a class of framework. Since you are doing calculation in your anonymous object, You can either return IQueryable<Order_Detail>
by select p
and do the calculation later on LINQ to object, or you may create a new class and project to that. If you end up creating a new class then you should modify your signature as per class name.
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;
}
If you create a new class like:
public class MyClass
{
public string Product {get;set;}
public double TotalSales {get;set;}
}
Then you can do
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;
}
Considering its a service returning data, its better if you create your own class and return only the required properties. You should also see this question
这篇关于如何投匿名类型的IQueryable< Order_Detail>在C#中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!