1

以下のコードは機能しています.. 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 - 追加されたブール

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)' の型引数は、使用法から推測できません。型引数を明示的に指定してみてください。

パラメータを渡すときに、塗りつぶされたビューを返す data.Select(CustomView, false).ToList() を呼び出すにはどうすればよいですか?

ps 1 つのレコード ( .ToList ではない) を取得する場合、CustomView は return CustomView(data, false); によって機能します。

4

1 に答える 1

1

ここでの主な問題は、Selectメソッドが 1 つのパラメーターを受け取る関数を想定しているのに、CustomView2 つのパラメーターを受け取ることです。これを解決する最も簡単な方法は、ラムダ式を使用してパラメーターをメソッドにカリー化することです。boolCustomView

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();
    }
}
于 2013-03-09T22:24:34.337 に答える