gpt4 book ai didi

c# - 如何处理 LINQ to Entities 仅支持无参数构造函数和初始值设定项

转载 作者:行者123 更新时间:2023-12-01 19:38:29 25 4
gpt4 key购买 nike

所以当我尝试从 Web Api 获取数据时会发生这种情况:

异常消息:

Only parameterless constructors and initializers are supported in LINQ to Entities.

这是我的服务:

public async Task<ICollection<TicketDto>> GetAllUnansweredTicketsAsync()
{
return await _context.Tickets.Include(m => m.Message)
.Include(u=>u.User)
.OrderByDescending(d=>d.Message.Date)
.Select(t => new TicketDto(t)).ToListAsync();

这就是我的 DTO 的样子:

public class TicketDto
{
public int ID { get; set; }
public string Username { get; set; }
public string Issue { get; set; }
public DateTime Date { get; set; }

public TicketDto(Ticket ticket)
{
ID = ticket.ID;
Username = ticket.User.UserName;
Issue = ticket.Message.Title;
Date = ticket.Message.Date;
}
}

有人可以解释一下如何解决这个问题吗?

最佳答案

Linq to Entities中,您的代码在服务器端执行,但构造函数无法由提供程序转换为SQL

您可以通过添加空构造函数并设置属性来解决问题:

...Select(t => new TicketDto
{
ID = t.ID,
Username = t.User.UserName,
Issue = t.Message.Title,
Date = t.Message.Date,
});

public class TicketDto
{
public TicketDto()
{
}
...

但是,如果您只想保留实际的构造函数,您可以切换到 Linq to Objects 调用 AsEnumerable():

...
.AsEnumerable()
.Select(t => new TicketDto(t))
.ToListAsync();

关于c# - 如何处理 LINQ to Entities 仅支持无参数构造函数和初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36875144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com