我在使用 AutoMapper Project().To 扩展方法获取可重用的 lambda 表达式时遇到问题。我正在使用 AutoMapper 3.1.1。
我希望能够通过将 lambda 表达式定义为变量来重用它,但是在使用扩展方法时遇到了问题。
注意下面显示的代码和 lambda 表达式是简化的,我的 lambda 表达式非常复杂,我想在很多地方重用它。
这是一个要重用的 lambda 表达式:
Func<Product, bool> myLambda = x => (x.Season.Id == 3);
Run Code Online (Sandbox Code Playgroud)
代码块 1使用 Project().To<> 和可重用的 lambda,甚至无法编译。
var dtos =
_unitOfWork.ProductRepository.All()
.Where(myLambda)
.Project().To<ProductGridDTO>()
.OrderBy(dynamicSort)
.Skip(skip)
.Take(take)
.ToList();
Run Code Online (Sandbox Code Playgroud)
它给出了以下编译错误:
错误 18
“System.Collections.Generic.IEnumerable”不包含“Project”的定义,并且找不到接受“System.Collections.Generic.IEnumerable”类型的第一个参数的扩展方法“Project”(您是否缺少 using 指令或汇编参考?)
代码块 2使用 .Select() 和 Mapper.Map() 并编译和工作,但生成的 SQL 查询返回所有列。我想使用 Project().To<> 仅返回 SQL 查询中的最少列集,从而更高效、更快捷。
var dtos =
_unitOfWork.ProductRepository.All()
.Where(myLambda)
.Select(y => Mapper.Map(y, new ProductGridDTO()))
.OrderBy(dynamicSort)
.Skip(skip)
.Take(take)
.ToList();
Run Code Online (Sandbox Code Playgroud)
代码块 3使用 …