在 .Net 运行时创建表达式<Func<T,K>>
Create Expression<Func<T,K>> in .Net Runtime
有一个名为 LiteDB 的不错的数据库。我发现不方便的是缺少用于指定实体之间的关系类型 (value/reference) 的属性,尽管 LiteDB 提供了用于对其进行硬编码的流畅接口(详细信息:https://github.com/mbdavid/LiteDB/wiki/DbRef)。我是个懒惰的人,不想总是更新这个硬编码关系来跟随我的数据模型的变化。所以我决定用 DbRef 属性(我的自定义属性)来实现数据模型实体的运行时发现。不幸的是,我在创建
时遇到了一些困难
Expression<Func<T,K>>
在 .Net 运行时...在以下调用(第一个参数)中提供它:
BsonMapper.Global.Entity<Order>().DbRef(x => x.Customer, "customers");
类型 T 和 K 在运行时作为 System.Type 的实例给出(此处示例:T - 订单,K - 客户)。
如果你们能给我一些关于如何实例化的提示,我将不胜感激
Expression<Func<T,K>>
在 .Net 运行时中以便将其提供给 ...DbRef(...) 函数。
来自你的提问。让我把截图发给你,也许它能给你一些线索Expression> Example
public IEnumerable<TEntity> Fetch(Expression<Func<TEntity, bool>> predicate, Func<IQueryable<TEntity>,
IOrderedQueryable<TEntity>> orderBy =null, int? page = null, int? pageSize = null)
{
IQueryable<TEntity> query = _dbSet;
if (orderBy != null)
{
query = orderBy(query);
}
if (predicate != null)
{
query = query.AsExpandable().Where(predicate);
}
if (page != null && pageSize != null)
{
query = query.Skip((page.Value - 1) * pageSize.Value).Take(pageSize.Value);
}
return query;
}
希望对您有所帮助
嗯,您有实体类型 T
、属性 类型 K
和 属性 名称。要构建 Expression<Func<T, K>>
,您可以简单地使用 Expression.Parameter
, Expression.Property
and Expression.Lambda
方法,如下所示:
var parameter = Expression.Parameter(typeof(T), "x");
var body = Expression.Property(parameter, propertyName);
var selector = Expression.Lambda(body, parameter);
有一个名为 LiteDB 的不错的数据库。我发现不方便的是缺少用于指定实体之间的关系类型 (value/reference) 的属性,尽管 LiteDB 提供了用于对其进行硬编码的流畅接口(详细信息:https://github.com/mbdavid/LiteDB/wiki/DbRef)。我是个懒惰的人,不想总是更新这个硬编码关系来跟随我的数据模型的变化。所以我决定用 DbRef 属性(我的自定义属性)来实现数据模型实体的运行时发现。不幸的是,我在创建
时遇到了一些困难Expression<Func<T,K>>
在 .Net 运行时...在以下调用(第一个参数)中提供它:
BsonMapper.Global.Entity<Order>().DbRef(x => x.Customer, "customers");
类型 T 和 K 在运行时作为 System.Type 的实例给出(此处示例:T - 订单,K - 客户)。
如果你们能给我一些关于如何实例化的提示,我将不胜感激
Expression<Func<T,K>>
在 .Net 运行时中以便将其提供给 ...DbRef(...) 函数。
来自你的提问。让我把截图发给你,也许它能给你一些线索Expression> Example
public IEnumerable<TEntity> Fetch(Expression<Func<TEntity, bool>> predicate, Func<IQueryable<TEntity>,
IOrderedQueryable<TEntity>> orderBy =null, int? page = null, int? pageSize = null)
{
IQueryable<TEntity> query = _dbSet;
if (orderBy != null)
{
query = orderBy(query);
}
if (predicate != null)
{
query = query.AsExpandable().Where(predicate);
}
if (page != null && pageSize != null)
{
query = query.Skip((page.Value - 1) * pageSize.Value).Take(pageSize.Value);
}
return query;
}
希望对您有所帮助
嗯,您有实体类型 T
、属性 类型 K
和 属性 名称。要构建 Expression<Func<T, K>>
,您可以简单地使用 Expression.Parameter
, Expression.Property
and Expression.Lambda
方法,如下所示:
var parameter = Expression.Parameter(typeof(T), "x");
var body = Expression.Property(parameter, propertyName);
var selector = Expression.Lambda(body, parameter);