代码之家  ›  专栏  ›  技术社区  ›  Jean-Francois

如何创建并返回表达式

  •  1
  • Jean-Francois  · 技术社区  · 14 年前


    我希望能够创建一个函数,该函数返回将在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;
            }
    

    我该怎么做。

    2 回复  |  直到 14 年前
        1
  •  3
  •   Morteza Manavi    14 年前

    容易的。例如,假设您有一个 产品 映射到的表 产品 产品 :

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

    你可以打电话 根据产品ID进行筛选:

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

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

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

    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);
    }
    
        2
  •  0
  •   marcind    14 年前

    如果要在运行时动态创建编译表达式(而不是在编译时针对特定数据模型硬编码的表达式),则需要在 Expression