以下代码正常工作.. CustomView已填充且没有任何错误。
CustomView
public static ProductView CustomView(Product data)
{
var view = new ProductView();
view.ID = data.ID;
view.Number = data.Number;
var invetoryCount = GetInvetoryCountNumber(data.Number);
if (invetoryCount < 1)
view.SoldOut = true;
return view;
}
功能
public static List<ProductView> GetAll()
{
using (var ctx = new DBSolutionEntities())
{
var data = ctx.Products.OrderBy(p => p.Name).ToList();
return data.Select(CustomView).ToList();
}
}
我想在函数中添加一个额外的参数来跳过库存搜索
CustomView - 添加bool
public static ProductView CustomView(Product data, bool skipInvCheck)
{
var view = new ProductView();
view.ID = data.ID;
view.Number = data.Number;
if(skipInvCheck)
{
var invetoryCount = GetInvetoryCountNumber(data.Number);
if (invetoryCount < 1)
view.SoldOut = true;
}
return view;
}
当我将bool param添加到CustomView并调用它时
public static List<ProductView> GetWithoutInvSoldOut()
{
using (var ctx = new DBSolutionEntities())
{
var data = ctx.Products.OrderBy(p => p.Name).ToList();
return data.Select(CustomView, false).ToList();
}
}
我收到以下错误:
无法从用法推断出方法'System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable,System.Func)'的类型参数。尝试明确指定类型参数。
如何调用返回填充的视图返回数据。传递参数时选择(CustomView,false).ToList()?
P.S。获取ONE记录(而不是.ToList)时,CustomView的工作原理是 返回CustomView(data,false);
答案 0 :(得分:1)
这里的主要问题是Select
方法需要一个带有单个参数的函数,但CustomView
需要两个参数。解决此问题的最简单方法是使用lambda表达式curry将bool
参数放入CustomView
方法。
public static List<ProductView> GetWithoutInvSoldOut()
{
using (var ctx = new DBSolutionEntities())
{
var data = ctx.Products.OrderBy(p => p.Name).ToList();
return data.Select(x => CustomView(x, false)).ToList();
}
}