現在、パラメーターとして を受け取るメソッドがFunc<Product, string>
ありますが、それを にする必要がありますExpression<Func<Product, string>>
。AdventureWorks を使用して、Func を使用してやりたいことの例を次に示します。
private static void DoSomethingWithFunc(Func<Product, string> myFunc)
{
using (AdventureWorksDataContext db = new AdventureWorksDataContext())
{
var result = db.Products.GroupBy(product => new
{
SubCategoryName = myFunc(product),
ProductNumber = product.ProductNumber
});
}
}
次のようにしたいと思います。
private static void DoSomethingWithExpression(Expression<Func<Product, string>> myExpression)
{
using (AdventureWorksDataContext db = new AdventureWorksDataContext())
{
var result = db.Products.GroupBy(product => new
{
SubCategoryName = myExpression(product),
ProductNumber = product.ProductNumber
});
}
}
ただし、私が直面している問題は、それmyExpression(product)
が無効であることです (コンパイルされません)。他の投稿を読んだ後、その理由がわかりました。そして、キーの 2 番目の部分に変数が必要であるという事実がなければ、product
おそらく次のように言うことができます。
var result = db.Products.GroupBy(myExpression);
しかしproduct
、キーの 2 番目の部分 (ProductNumber) が必要なので、変数が必要です。だから私は今何をすべきか本当にわかりません。問題が発生するため、Func のままにしておくことはできません。product
変数に渡す方法がわからないため、式の使用方法がわかりません。何か案は?
編集:メソッドを呼び出す方法の例を次に示します。
DoSomethingWithFunc(product => product.ProductSubcategory.Name);