小编use*_*893的帖子

AutoMapper Project().To<T> 和可重用的 lambda 表达式

我在使用 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使用 …

c# linq lambda iqueryable automapper

5
推荐指数
1
解决办法
1909
查看次数

标签 统计

automapper ×1

c# ×1

iqueryable ×1

lambda ×1

linq ×1