使用Linq到EF传递参数时填充视图

时间:2013-03-09 22:19:36

标签: c# asp.net entity-framework function linq-to-entities

以下代码正常工作.. 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);

1 个答案:

答案 0 :(得分:1)

这里的主要问题是Select方法需要一个带有单个参数的函数,但CustomView需要两个参数。解决此问题的最简单方法是使用lambda表达式currybool参数放入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();
    }
}