无法将类型DbSet <>隐式转换为IQueryable <>

时间:2019-02-19 05:50:13

标签: c# asp.net-web-api

我使用此文档在ASP.NET WEB API中创建了一个oData。 OData in ASP.NET Web API。我的EF在另一个项目上,因此我只将引用添加到我的WEB API项目中。创建端点后。

    public class ItemController : ODataController
{
    SAP_PORTALEntities db = new SAP_PORTALEntities();
    private bool ItemExists(string key)
    {
        return db.sap_item.Any(s => s.ItemCode == key);
    }
    protected override void Dispose(bool disposing)
    {
        db.Dispose();
        base.Dispose(disposing);
    }

    [EnableQuery]
    public IQueryable<Item> Get()
    {
        return db.sap_item;
    }

    [EnableQuery]
    public SingleResult<sap_item> Get([FromODataUri] string key)
    {
        var item = db.sap_item.Where(s => s.ItemCode == key);
        IQueryable<sap_item> itemModel;

        itemModel = item;

        return SingleResult.Create(itemModel);
    }

    public async Task<IHttpActionResult> Post(sap_item item)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }
        db.sap_item.Add(item);
        await db.SaveChangesAsync();

        return Created(item);
    }
}

此行出现错误: IQueryable Get()

Cannot implicitly convert type 'System.Data.Entity.DbSet<sap_dataaccess.sap_item>' to 'System.Linq.IQueryable<sap_portal.Models.Item>'. An explicit conversion exists

项目是我的模型。

public class Item
{ 
    public string ItemCode { get; set; }
    public string Dscription { get; set; }
    public string ItemGroup { get; set; }
    public string InvItem { get; set; }
    public string PurItem { get; set; }
    public string SalItem { get; set; }
    public string UOMGroup { get; set; }
    public string Manufacturer { get; set; }
    public string Active { get; set; }
    public string PurUOM { get; set; }
    public Nullable<decimal> QtyPurUOM { get; set; }
}

1 个答案:

答案 0 :(得分:1)

您可以尝试使用linq AsQueryable,否则您将只返回DbSet<sap_dataaccess.sap_item>,但转换类型将失败。

[EnableQuery]
public IQueryable<Item> Get()
{
    return db.sap_item.AsQueryable();
}