【发布时间】:2017-10-26 16:52:41
【问题描述】:
代码:
public static IEnumerable<TableRowModel> GetRows()
{
var to_ret = db.TableRows.select(x=> new TableRowModel(){
TableRowId = x.TableRowId,
Type = x.Type,
Name = x.Name,
CreatedAt = x.CreatedAt,
ModifiedAt = x.ModifiedAt,
Enums = x.Enums.Select(y => y.ToEnumModel()),
});
return to_ret;
}
public static EnumModel ToEnumModel(this Enum x)
{
var to_ret = new EnumModel()
{
CFPId = x.CFPId,
CreatedAt = x.CreatedAt,
ModifiedAt = x.ModifiedAt,
};
return to_ret;
}
使用GetRows 方法时出现以下错误:
LINQ to Entities 无法识别该方法
鉴于该错误,据了解LINQ To Entities 无法识别扩展方法ToEnumModel。
我想知道是否有办法解决这个问题?
这样我就不会在GetRows 扩展中再次重复ToEnumModel 代码。
【问题讨论】:
-
您可以在查询中将
AsEnumerable放在Select之前,这样它将运行SQL,然后在内存中进行映射。此外,您可能想查看可以为您执行此操作的库,例如 AutoMapper。 -
@juharr 谢谢,我确实看过 AutoMapper,认为自定义扩展会提供更多控制。很想知道 Automapper 如何解决这个问题。
-
你也有同样的事情,首先实现你的实体,然后通过 AutoMapper 运行它以获取映射的类。
-
为了更清楚,你的意思是说 AutoMapper 也做了类似于@stybol 在下面的答案中建议的事情吗?利用
AsEnumerable -
不是你会做类似
var queryResults = someQueryHere然后你会做var realResutls = Mapper.Map<List<DesiredType>>(queryResults);
标签: c# entity-framework linq