【问题标题】:Use Linq in a C# Web API在 C# Web API 中使用 Linq
【发布时间】:2018-11-11 17:55:16
【问题描述】:

您好,我正在用 C# 开发一个带有实体框架的 Web API,我的数据库中有 4 个表

Products: 
    IdProduct, 
    IdCategory, 
    IdBrand, 
    Product, 
    Price, 
    Descryption, 
    IdOffice

Category: 
    IdCategory, 
    Category

Brand: 
    IdBrand, 
    Brand

Office: 
    IdOffice, 
    Office

我使用 Products 模型做了一个 Web API,但我想显示数据而不是 Id。

这是我所做的,但在返回时给了我一个错误

不能隐式转换类型'System.Linq.IQueryable'匿名类型int IdProducto、字符串类别、字符串产品、字符串品牌、字符串办公室、字符串描述、十进制? System.Linq.IQueryable NameProject 中的价格'

private ExamenPOO1Entities db = new ExamenPOO1Entities();
private ExamenPOO1Entities1 ca = new ExamenPOO1Entities1();
private ExamenPOO1Entities2 ma = new ExamenPOO1Entities2();
private ExamenPOO1Entities3 su = new ExamenPOO1Entities3();

// GET: api/Productoes
public IQueryable<Producto> GetProductos()
{
    var query =
        from p in db.Productos
        join c in ca.Categorias
        on p.IdCategoria equals c.IdCategoria
        join m in ma.Marcas 
        on p.IdMarca equals m.IdMarca
        join s in su.Sucursales
        on p.IdSucursal equals s.IdSucursal
        select new 
        { IdProducto =p.IdProducto, Categoria = c.Categoria1, Producto = p.Producto1,
            Marca = m.Marca1, Sucursal = s.Sucursal, Descripcion = p.Descripcion,
            Precio = p.Precio};
        return query;
}

【问题讨论】:

  • 请发布错误信息。
  • 不相关,但是关于 4 db 上下文 - 这意味着连接是在内存中完成的。你确定你不能减少这些吗?
  • 呃,跨上下文加入肯定很讨厌。也许这是给你的错误?除非您告诉我们您的错误是什么,否则我们不知道...
  • 在新关键字之后,输入Producto。
  • 不能隐式转换类型'System.Linq.IQueryable' >' 在 System.Linq.IQueryable

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


【解决方案1】:

您遇到此错误是因为正如您所指定的,您的方法必须返回 IQueryable&lt;Producto&gt;,但当您使用下面的代码时,您会返回一个匿名对象

select new {
     IdProducto =p.IdProducto, 
     Categoria = c.Categoria1, 
     Producto = p.Producto1,
     Marca = m.Marca1, 
     Sucursal = s.Sucursal, 
     Descripcion = p.Descripcion,
     Precio = p.Precio
}

所以为了与方法的签名一致,选择应该创建一个新的Producto

select new Producto
    { ... }

【讨论】:

  • 但这也行不通,至少现在类的定义方式不行。例如,新对象接收到属性 Category/Categoria。 Product/Producto 类没有这样的属性。您可能只想返回一个 IQueryable.
  • 所以应该只对我所有的表做 1 个模型吗?
  • 如果您尊重“Producto”属性并且不将所有内容放在大括号之间,它将起作用,如果您想要在第一次选择中指定的所有数据,您应该是否使用这些道具创建模型或者返回一个 IQueriable 并且它会起作用(不要忘记在这种情况下将签名从 IQueriable 更改为 IQueriable)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
  • 2014-01-08
  • 2022-01-04
  • 2016-03-23
  • 2019-12-14
  • 1970-01-01
相关资源
最近更新 更多