c# - 无法隐式转换类型 List<> 到 IEnumerable
问题描述
我正在尝试执行 linq 查询Join
,但弹出了一个异常。
这是我的方法:
public async Task<IEnumerable<Product>> TestProducts()
{
var items = await _context.Products.Join(_context.ProductTypes,
p => p.ProductId,
c => c.ProductTypeId,
(p, c) => new
{
productId = p.ProductId,
number = p.Number,
amount = p.Amount,
primeCostEUR = p.PrimeCostEUR,
nameType = c.NameType
}).ToListAsync();
return items;
}
这是我的模型:
public class Product //: BaseObject
{
public long ProductId { get; set; }
public string Number { get; set; }
public double Amount { get; set; }
public double PrimeCostEUR { get; set; }
public long ProductTypeId { get; set; }
public ProductType ProductType { get; set; }
public long ProductParameterId { get; set; }
public ICollection<ProductParameter> ProductParameters { get; set; } =
new List<ProductParameter>();
}
public class ProductType //: BaseObject
{
public long ProductTypeId { get; set; }
public string NameType { get; set; }
public ICollection<Product> Products { get; set; }
public ICollection<Parameter> Parameters { get; set; }
}
这是我遇到的错误:
错误 CS0266 无法将类型“System.Collections.Generic.List<>”隐式转换为“System.Collections.Generic.IEnumerable<.Models.Product>”。
解决方案
看来您的预期回报输出是两者Product
和ProductType
模型类的组合。因此,如下创建一个 DTO(数据传输对象)类,它将包含输出查询的所有字段。
public class ProductDto
{
public long ProductId { get; set; }
public string Number { get; set; }
public double Amount { get; set; }
public double PrimeCostEUR { get; set; }
public string ProductTypeName { get; set; }
}
现在编写控制器方法如下,其中方法的返回类型为IEnumerable<ProductDto>
:
public async Task<IEnumerable<ProductDto>> TestProducts()
{
var items = await _context.Products.Select(p => new ProductDto
{
ProductId= p.ProductId,
Number= p.Number,
Amount= p.Amount,
PrimeCostEUR= p.PrimeCostEUR,
ProductTypeName = p.ProductType.NameType
}).ToListAsync();
return items;
}
此外,您不需要像以前那样显式 LINQ 连接,您可以使用 EF 投影来实现与我所做的相同的事情,而且更简单。
推荐阅读
- spring - Spring MVC 应用程序中的会话属性有多安全?
- spring - 是百里香叶还是春天的字段对象
- python - 迭代行并收集输出值。Numpy 和 Python 3.6
- arrays - 计算 int 数组中唯一数字的数量
- python-2.7 - 使用带有特定子标签的 python 解析 OSM XML 数据
- javascript - 并行调用 async/await 函数在 React 的 componentDidMount 上不起作用
- python - 字典验证 Cerberus 使用保留关键字
- sorting - 排序()不工作
- dialogflow-es - 在 DialogFlow 企业版上设置代理?
- scala - 使用 Scala 的 sys.process API 调用带引号字符串的命令时遇到问题