【问题标题】:Cannot implicitly convert WebApi无法隐式转换 WebApi
【发布时间】:2021-12-29 20:45:22
【问题描述】:

我正在处理一项挑战,但我遇到了一个我无法弄清楚的错误。它说“无法将类型 'HolidayChallenge.Models.Ornament.Ornament2ListItem[]' 隐式转换为 'System.Collections.Generic.IEnumerable 我完全不确定如何解决这个问题。错误在return query.ToArray(); line.

public IEnumerable<Ornament2> GetOrnaments()
        {
            using (var ctx = new ApplicationDbContext())
            {
                var query =
                    ctx
                        .Ornaments
                        .Where(e => e.UserId == _userId)
                        .Select(
                            e =>
                                new Ornament2ListItem
                                {
                                    Id = e.Id,
                                    Description = e.Description,
                                    TreeId = e.TreeId
                                }
                                );
                return query.ToArray();
            }
        }

Ornament2ListItem 的代码如下:

namespace HolidayChallenge.Models.Ornament
{
    public class Ornament2ListItem
    {
        [Key]
        public int Id { get; set; }
        public string Description { get; set; }
        public virtual List<Ornament2> Ornaments { get; set; }
        public int TreeId { get; set; }
    }
}

数据层代码如下:

namespace HolidayChallenge.Data
{
    public class Ornament2
    {
        [Key]
        public int Id { get; set; }
        public Guid UserId { get; set; }
        public string Description { get; set; }
        public virtual List<Ornament2> Ornaments { get; set; }
        [ForeignKey("ChristmasTree")]
        public int TreeId { get; set; }
        [Required]
        public virtual ChristmasTree ChristmasTree { get; set; }
    }
}

我将不胜感激。

【问题讨论】:

    标签: c#


    【解决方案1】:

    请将query.ToArray() 替换为query.ToList()

    还将返回类型从 IEnumerable&lt;Ornament2&gt; 更改为 IEnumerable&lt;Ornament2ListItem&gt;

    【讨论】:

    • 我已经这样做了,它会询问我是否缺少演员表。我想将什么转换为已经是模型和数据层中的列表的列表?
    • 谢谢你,我解决了演员阵容问题。
    【解决方案2】:

    问题是您的查询将结果投影到 Ornament2ListItem 类型的 IEnumerable ...

    .Select(
        e =>
            new Ornament2ListItem
            {
                Id = e.Id,
                Description = e.Description,
                TreeId = e.TreeId
            }
            );
    

    但预期的返回类型是 Ornament2 的 IEnumerable ...

    public IEnumerable<Ornament2> GetOrnaments()
    

    如果你真的想返回 Ornament2ListItem 的 IEnumerable 那么你需要改变方法的返回类型...

    public IEnumerable<Ornament2ListItem> GetOrnaments()
    

    如果您想返回 Ornament2 的 IEnumerable,则只需从上下文中返回它,而不是投影到 Ornament2ListItem ...

    return
        ctx
            .Ornaments
            .Where(e => e.UserId == _userId);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多