使用Entity Framework中的字段子集时出错

时间:2014-05-06 18:00:05

标签: c# linq entity-framework

我是第一次在WebAPI服务中使用EF 4。我理解EF的基础知识,但是当我习惯使用ADO时,它仍然是一个学习曲线。

我只想返回表格中超过100个字段的子集(5)。

模型(EF生成):

public partial class ITEM_MASTER
{
    public string IM_ITEM_CODE { get; set; }
    public string IM_UPC { get; set; }
    public string IM_SUBDEPARTMENT { get; set; }
    public string IM_DESC { get; set; }
    ...
}

在我的控制器中获取方法:

// GET api/Products
public IQueryable<ITEM_MASTER> GetProduct()
{
    // return db.ITEM_MASTER;

    return db.ITEM_MASTER.Select(x => new ProductList { ItemCode = x.IM_ITEM_CODE });
}

return db.ITEM_MASTER有效,但使用.Select方法我收到错误:

  

无法隐式转换类型   'System.Linq.IQueryable<JWebAPI.Models.ProductList>'来   'System.Linq.IQueryable<JWebAPI.Models.ITEM_MASTER>'。一个明确的   存在转换(你错过了演员吗?)

public class ProductList
{
    public string ItemCode {get; set;}
}

ProductList类充当占位符对象,因为使用.Select返回的是DBQuery而不是原始对象类型。我读到这是处理这种情况的理想方式。当我开始工作时,我会为它添加更多属性。我有一个下载的样本,其结构相同,并且有效。

这是做我需要的最好方法,只返回EF字段的一部分吗?如何解决转换错误?

1 个答案:

答案 0 :(得分:3)

错误很明显,您的方法假设返回IQueryable<ITEM_MASTER>,但您尝试返回'System.Linq.IQueryable<JWebAPI.Models.ProductList>'

由于您将查询的结果投影到'System.Linq.IQueryable<JWebAPI.Models.ProductList>',因此您需要将其作为返回类型。

// GET api/Products
public IQueryable<ProductList> GetProduct() //Change return type
{
    // return db.ITEM_MASTER;

    return db.ITEM_MASTER.Select(x => new ProductList { ItemCode = x.IM_ITEM_CODE });
}

由于您只选择原始实体的一个子集,因此您无法投影到实体框架中映射到表的实体,这就是您需要占位符类ProductList

的原因