如何创建并返回 Expression
我使用实体框架4。
我希望能够创建一个返回将在 lambda 表达式中使用的表达式函数的函数。
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;
}
我如何执行此操作。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web
技术交流群。
我使用实体框架4。
我希望能够创建一个返回将在 lambda 表达式中使用的表达式函数的函数。
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;
}
我如何执行此操作。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
简单的。例如,假设您有一个 Product 表,该表映射到上下文中的 Products EntitySet,现在您想要传递一个谓词并选择一个 Product em>:
您可以使用产品 ID 调用 GetPredicate() 来基于此进行过滤:
真正的要点是,您始终可以将 Lambda 表达式传递到表达式 所需要的位置。是需要的。
编辑:
您应该像这样更改您的代码:
Easy. For example, Let's assume you have a Product table that is mapped to Products EntitySet in your context, now you want to pass a predicate and select a Product:
You can call GetPredicate() with a Product ID to filter based on that:
The point really is that you can always pass a Lambda Expression to where an Expression<T> is needed.
EDIT:
You should change your code like this:
如果您想在运行时动态创建已编译的表达式(而不是在编译时针对特定数据模型硬编码的表达式),您需要使用 表达式 类。
If you want to dynamically create compiled Expression at runtime (as opposed to ones hardcoded against a particular data model at compile time) you need to use the static methods on the Expression class.