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

标签 c# ajax entity-framework linq

所以当我尝试从 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/

相关文章:

c# - 如何设计像 Google Chrome 标签页一样的标签页?

javascript - Ajax 响应文本始终为 1

c# - 使用 Entity Framework 返回所有 IQueryable

entity-framework - 在即时窗口中获取 EntityValidationErrors 列表

C# UDP - 可以告诉 Windows 在一定时间后丢弃数据包吗?

c# - Regex.Matches 没有捕获我需要的整个组

c# - 如何按文件名顺序合并文件

javascript - 使用 JavaScript/ajax 在单击按钮上更改特定 TD 的背景颜色

jquery - 无法在 spring mvc 形式中使用ajax

c# - 将 ROW_NUMBER 添加到特定实体的 LINQ 查询?