如何投匿名类型的IQueryable< Order_Detail>在C#中? [英] how to cast an anonymous type to IQueryable<Order_Detail> in C#?

查看:260
本文介绍了如何投匿名类型的IQueryable< Order_Detail>在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。



如何完成

$ <$>

$ <$>

$ <$>

解决方案c> 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
其中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&LT; Order_Detail&GT;在C#中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆