使用实体框架中的字段子集出错
本文关键字:字段 子集 出错 实体 框架 | 更新日期: 2023-09-27 18:02:13
我是第一次在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方法在我的控制器:
// 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字段的一个子集吗?如何解决转换错误?
这个错误很明显,你的方法应该返回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