C# 在C Web API中使用Linq

C# 在C Web API中使用Linq,c#,asp.net,linq,asp.net-web-api,C#,Asp.net,Linq,Asp.net Web Api,嗨,我正在用C语言开发一个带有实体框架的Web API,我的数据库中有4个表 Products: IdProduct, IdCategory, IdBrand, Product, Price, Descryption, IdOffice Category: IdCategory, Category Brand: IdBrand, Brand Office: IdOffic

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

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

Category: 
    IdCategory, 
    Category

Brand: 
    IdBrand, 
    Brand

Office: 
    IdOffice, 
    Office
我用产品模型做了一个Web API,但我想显示数据,而不是Id

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


无法隐式转换类型“System.Linq.IQueryable”匿名类型int-IdProducto、字符串类别、字符串产品、字符串品牌、字符串办公室、字符串描述、十进制?System.Linq.IQueryable名称项目中的“价格”


出现此错误的原因是,正如您所指定的,您的方法必须返回IQueryable,但在使用下面的代码时,您返回的是匿名对象

select new {
     IdProducto =p.IdProducto, 
     Categoria = c.Categoria1, 
     Producto = p.Producto1,
     Marca = m.Marca1, 
     Sucursal = s.Sucursal, 
     Descripcion = p.Descripcion,
     Precio = p.Precio
}
因此,为了与方法的签名保持一致,select应该创建一个新的Producto


出现此错误的原因是,正如您所指定的,您的方法必须返回IQueryable,但在使用下面的代码时,您返回的是匿名对象

select new {
     IdProducto =p.IdProducto, 
     Categoria = c.Categoria1, 
     Producto = p.Producto1,
     Marca = m.Marca1, 
     Sucursal = s.Sucursal, 
     Descripcion = p.Descripcion,
     Precio = p.Precio
}
因此,为了与方法的签名保持一致,select应该创建一个新的Producto


请发布错误消息。不相关,但哎哟约4数据库上下文-这意味着连接是在内存中完成的。你确定你不能减少这些吗?呃,跨上下文连接肯定是令人讨厌的。也许是因为给了你错误?除非您告诉我们您的错误是什么,否则我们不知道错误是什么…在new关键字之后,键入Producto。无法隐式转换System.Linq.IQueryable中的类型“System.Linq.IQueryable”。请发布错误消息。不相关,但令人痛心的是4 db上下文-这意味着连接是在内存中完成的。你确定你不能减少这些吗?呃,跨上下文连接肯定是令人讨厌的。也许是因为给了你错误?除非您告诉我们您的错误是什么,否则我们不知道错误是什么…在new关键字之后,type Producto.无法隐式转换System.Linq.IQueryable中的type'System.Linq.IQueryable',但这也不会起作用,至少不会是现在定义类的方式。例如,新对象收到一个属性类别/分类。Product/Producto类没有这样的属性。你可能只想返回一个iQueryTable。那么我的所有表应该只做一个模型吗?如果你尊重“Producto”属性,而不是把所有的东西都放在花括号之间,它会起作用,如果您想要在第一次选择中指定的所有数据,那么您应该使用这些道具创建一个模型,还是返回一个iQuerable,并且它会起作用。在这种情况下,不要忘记将签名从iQuerable更改为iQuerable。但这也不会起作用,至少不会是现在定义类的方式。例如,新对象收到一个属性类别/分类。Product/Producto类没有这样的属性。你可能只想返回一个iQueryTable。那么我的所有表应该只做一个模型吗?如果你尊重“Producto”属性,而不是把所有的东西都放在花括号之间,它会起作用,如果您想要在第一次选择中指定的所有数据,那么您应该使用这些道具创建模型还是返回iQuerable,并且它会起作用。在这种情况下,不要忘记将签名从iQuerable更改为iQuerable。
select new Producto
    { ... }