如何创建和返回表达式

时间:2010-10-08 23:12:17

标签: asp.net-mvc-2 entity-framework-4 lambda

我使用实体框架4.
我希望能够创建一个返回将在lambda表达式中使用的Expression 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;
        }

我该怎么做呢。

2 个答案:

答案 0 :(得分:4)

易。例如,假设您有一个 Product 表,该表映射到您的上下文中的 Products EntitySet,现在您想要传递谓词并选择产品

Expression<Func<Product, bool>> GetPredicate(int id) {
    return (p => p.ProductID == id);
}

您可以使用产品ID调用 GetPredicate()进行过滤:

var query = ctx.Products.Where(GetPredicate(1)).First();

关键在于您始终可以将Lambda表达式传递给表达式&lt; T&gt;的位置。需要。

修改
您应该像这样更改代码:

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);
}

答案 1 :(得分:0)

如果要在运行时动态创建已编译的Expression(而不是在编译时针对特定数据模型进行硬编码),则需要使用Expression类上的静态方法。