我有一个通用的存储库实现,它创建一个IQueryable,如下所示:
internal IEnumerable<T> Get(Expression<Func<T, bool>> filter = null,
Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null,
List<Expression<Func<T, object>>> includeProperties = null,
int? page = null,
int? pageSize = null)
{
IQueryable<T> query = m_dbSet;
if (filter != null)
query = query.Where(filter);
if (orderBy != null)
query = orderBy(query);
if (page != null && pageSize != null)
query = query.Skip((page.Value - 1) * pageSize.Value)
.Take(pageSize.Value);
if (includeProperties != null)
includeProperties.Aggregate(query, (current, include) => current.Include(include));
return query.ToList();
}
我遇到的问题是我传递给include的Expression不会包含在查询的输出中。生成的SQL不包含JOIN。
我在查询中没有其他参数。 Filter,orderBy,page和pageSize都为null。包含列表包含单个表达式,表达式引用的成员声明为
public virtual MyType m_Member { get; set; }
在Repository对象的POCO类中。
我已经读过IQueryable在选择或投影中删除了Include,但我相信我不会在这里做。有谁知道这里发生了什么?
答案 0 :(得分:2)
您应该将汇总结果分配给query
,我认为:
query = includeProperties.Aggregate(query, ...);