我使用实体框架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;
}
我该怎么做呢。
答案 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类上的静态方法。