使用 LINQ 的自定义投影运算符
本文关键字:投影 运算符 自定义 LINQ 使用 | 更新日期: 2023-09-27 18:33:52
我们创建了自定义存储库类来从实体框架上下文中检索对象。Get 方法始终返回整个对象。
我希望包括项目操作员选择作为参数。这样我们就可以从外部传递需要选择的内容,SQL查询将更有效率。可行吗?
public class GenericRepository<TEntity> where TEntity : class
{
internal DbContext context;
public IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null)
{
IQueryable<TEntity> query = dbSet;
if (filter != null)
{
query = query.Where(filter);
}
if (orderBy != null)
{
return orderBy(query).ToList();
}
else
{
return query.ToList();
}
}
}
将params Expression<Func<T, object>>[] properties
参数(属性选择器)添加到执行查询的方法,其中T
是实体的类型。下一个调用以下方法以获取有关每个属性的信息
private static PropertyInfo ResolveProperty<T>(Expression<Func<T, object>> property) where T : class
{
MemberExpression member;
UnaryExpression body = property.Body as UnaryExpression;
if (body != null)
{
member = (MemberExpression)body.Operand;
}
else
{
member = (MemberExpression)property.Body;
}
PropertyInfo info = (PropertyInfo)(member).Member;
return info;
}
现在,当您有关于属性的信息时,您可以继续自定义实现或使用System.Linq.Dynamic
https://dynamiclinq.codeplex.com/