我有一个当前将 aFunc<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)
是无效的(不会编译)。在阅读了其他一些帖子后,我明白了为什么。如果不是因为我需要product
密钥的第二部分的变量,我可能会这样说:
var result = db.Products.GroupBy(myExpression);
但我确实需要该product
变量,因为我确实需要密钥的第二部分(ProductNumber)。所以我不确定现在该怎么做。我不能将其保留为 Func,因为这会导致问题。我不知道如何使用表达式,因为我看不到如何将product
变量传递给它。有任何想法吗?
编辑:这是我如何调用该方法的示例:
DoSomethingWithFunc(product => product.ProductSubcategory.Name);