簡體   English   中英

在實體框架中使用字段子集時出錯

[英]Error using a subset of fields in 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字段的一個子集嗎? 我該如何解決轉換錯誤?

好了,錯誤很明顯,您的方法應該返回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 });
}

由於您只選擇原始實體的一個子集,因此無法投影到映射到Entity框架中的表的實體,這就是為什么需要占位符類ProductList

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM