无法将类型'System.Collections.Generic.List '隐式转换为'DistributionEmail.Data.EmailInfo'

问题描述 投票:0回答:1

我正在编写我的第一个blazor应用程序,以获取某些电子邮件数据并根据需要对其进行修改,并且我获得了以下错误OPN编译信息。无法将类型'System.Collections.Generic.List'隐式转换为'DistributionEmail.Data.EmailInfo'

我已经根据发现的工作示例对应用程序进行了建模。我的课是

public class EmailInfoDb
{
    [Key]
    public int EmailInfoID { get; set; }

    [Required]
    public string Name { get; set; }

    [Required]
    public string Address{ get; set; }

    [Required]
    public string Password { get; set; }
}

界面如下

 public interface IEmailInfoListService
 {
    Task<List<EmailInfoDb>> Get();

    Task<EmailInfoDb> Get(int id);

    Task<EmailInfoDb> Add(EmailInfoDb emailinfo);

    Task<EmailInfoDb> Update(EmailInfoDb emailinfo);
}

public class EmailInfoListService : IEmailInfoListService
{
    private readonly ApplicationDbContext _context;

    public EmailInfoListService(ApplicationDbContext context)
    {
        _context = context;
    }

    public async Task<List<EmailInfoDb>> Get()
    {
         return await _context.Emails.ToListAsync();
    }

    public async Task<EmailInfoDb> Get(int id)
    {
        var email = await _context.Emails.FindAsync(id);
        return email;
    }

    public async Task<EmailInfoDb> Add(EmailInfoDb email)
    {
        _context.Emails.Add(email);
        await _context.SaveChangesAsync();
        return email;
    }

    public async Task<EmailInfoDb> Update(EmailInfoDb emailinfo)
    {
        _context.Entry(emailinfo).State = EntityState.Modified;
        await _context.SaveChangesAsync();
        return emailinfo;
    }
}

最后,在我的剃须刀页面中

private void PrepareForEdit(EmailInfoDb task)
{
    customHeader = "Edit Task";
    emailObject = task;
}

protected override async Task OnInitializedAsync()
{

    emailObject = await EmailService.Get();

}

private async Task RefreshData()
{
    emailInfoList = await EmailService.Get();
}

private async void DataChanged()
{
    emailInfoList = await EmailService.Get();
    StateHasChanged();
}

仅对方法显示错误

protected override async Task OnInitializedAsync()
{
    emailObject = await EmailService.Get();
}
entity-framework blazor
1个回答
0
投票

[好,您的EmailService.Get方法仅返回EmailInfo实例或List<EmailInfo>实例,但是您正在使用它,就像它返回了两者一样,请看此:

  protected override async Task OnInitializedAsync()
    {

        emailObject = await EmailService.Get();

    }

在这里,您将其视为单个EmailInfo,但在这里(假定基于变量名)您将其视为一个列表:

private async Task RefreshData()
    {
        emailInfoList = await EmailService.Get();
    }

因此,您的OnInitializedAsync方法应如下所示:

  protected override async Task OnInitializedAsync()
    {

        emailObject = (await EmailService.Get())[0]; // get first EmailInfo instance

    }

当然,这是一个非常幼稚的实现,您将需要检查从List<EmailInfo>获得的EmailService.Get是不是null还是为空,但是假设这是您唯一使用电子邮件收集的地方一个实例,则应使用此更改进行编译。

© www.soinside.com 2019 - 2024. All rights reserved.