Iva*_*anD 3 c# linq ajax entity-framework
因此,当我尝试从 Web Api 获取数据时,就会发生这种情况:
异常消息:
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();
Run Code Online (Sandbox Code Playgroud)
这就是我的 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;
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下如何解决这个问题吗?
在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()
{
}
...
Run Code Online (Sandbox Code Playgroud)
但如果您只想保留实际的构造函数,您可以切换到Linq to Objects调用AsEnumerable()
:
...
.AsEnumerable()
.Select(t => new TicketDto(t))
.ToListAsync();
Run Code Online (Sandbox Code Playgroud)