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