LINQ to Entities无法识别方法 - 异步操作

时间:2017-03-03 00:07:35

标签: c# linq asynchronous async-await

我有一个带有自定义方法的模型类:

public class Category {

    public int Id { get; set; }
    public string Name { get; set; }

    public CategoryListViewModel ToListViewModel() {
        return new CategoryListViewModel { 
            Id = this.Id,
            Name = this.Name
        };
    }

尼斯。在我的存储库层中,我尝试使用System.Data.Entity可用方法(例如ToListAsync())进行异步查询。但是,当我尝试调用以下代码时......

Context.Categories.Select(c => c.ToListViewModel()).ToListAsync();

编译器抱怨消息:LINQ to Entities does not recognize "ToListViewModel()" method [...]

我可以执行以下操作以使查询支持该方法...

Context.Categories.AsEnumerable().Select(c => c.ToListViewModel())

...虽然我无法致电ToListAsync(),因为IEnumerable未实施此方法。

如何保持我的查询异步并调用上面提到的方法?有什么想法吗?

谢谢大家!

1 个答案:

答案 0 :(得分:0)

如果所有其他方法都失败,则进行内联投影

Context.Categories.Select(c => new CategoryListViewModel { 
            Id = c.Id,
            Name = c.Name
        }).ToListAsync();

因此,它可以正确生成,因为实体的linq必须能够将查询转换为实际的SQL语句。