Asp.net mvc 2 如何创建和返回表达式<;Func

Asp.net mvc 2 如何创建和返回表达式<;Func,asp.net-mvc-2,entity-framework-4,lambda,Asp.net Mvc 2,Entity Framework 4,Lambda,我使用实体框架4。 我希望能够创建一个函数,返回将在lambda表达式中使用的表达式func var ViewModel = _db.Suppliers.Select(model => new { model,SupType = model.SupplierType.SupplierTypeTexts.Where( st => st.LangID == 1) }); 我想这样打电话 var ViewModel

我使用实体框架4。
我希望能够创建一个函数,返回将在lambda表达式中使用的表达式func

  var ViewModel = _db.Suppliers.Select(model => new { 
                model,SupType = model.SupplierType.SupplierTypeTexts.Where( st => st.LangID == 1)   
            });
我想这样打电话

  var ViewModel = _db.Suppliers.Select(model => new { 
                model,SupType = model.SupplierType.GetText() 
            });
我的部分课程是:

  public partial class SupplierType
    {

       public  Expression<Func<SupplierTypeText, bool>> GetText()
        {
            return p => p.LangID == 1;
        }
公共部分类供应商类型
{
公共表达式GetText()
{
返回p=>p.LangID==1;
}

如何执行此操作。

简单。例如,假设您有一个映射到上下文中Products EntitySet的Product表,现在您希望传递一个谓词并选择一个产品:

关键是,始终可以将Lambda表达式传递到需要表达式的位置。

编辑:
您应该像这样更改代码:

var ViewModel = _db.Suppliers.Select(model => new { 
    model,
    SupType = model.SupplierType.SupplierTypeTexts.Where(GetText()) 
});
public Expression GetText(){
返回(stt=>stt.LangID==1);
}

如果希望在运行时动态创建编译表达式(与编译时针对特定数据模型硬编码的表达式相反)您需要在类上使用静态方法。

哦,很好,我尝试了您的解决方案,但这给了我类似的错误。LINQ to实体无法识别方法'System.LINQ.Expressions.Expression
1[System.Func
2[MySite.Models.Supplier,System.Boolean]]GetText()'方法,而此方法无法转换为存储表达式。因此,您的错误是由GetText()引起的方法。请共享您的代码,我会为您修复它,或者让我知道您的确切情况,我会相应地更改代码。我更新了我的帖子。@Morteza感谢您的支持这是一个多语言网站,我想根据客户的语言选择获取文本。现在我硬编码了语言ID。没问题。好的,您可以在SupplierType上调用GetText()时,您应该仅在需要谓词时传递GetText()。请查看我编辑的答案,并让我知道它对您的作用。我基于此更新了我的答案。请检查它。
var query = ctx.Products.Where(GetPredicate(1)).First();
var ViewModel = _db.Suppliers.Select(model => new { 
    model,
    SupType = model.SupplierType.SupplierTypeTexts.Where(GetText()) 
});
public Expression<Func<SupplierTypeText, bool>> GetText() {
    return (stt => stt.LangID == 1);
}