实体框架包含不包括相关实体



我的存储库中有以下代码。出于某种原因,请查询。Include((方法不起作用,结果中不包括相关实体。仔细检查是否正确传递了属性名称。也许我用错方法了?有什么想法吗?

public IEnumerable<TEntity> Get(
Func<TEntity, bool> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> order = null,
string includedProperties = null)
{
IQueryable<TEntity> query = _context.Set<TEntity>();
if (filter is not null)
{
query = query.Where(filter).AsQueryable();
}
if (order is not null)
{
query = order(query);
}
if (includedProperties is not null)
{
var properties = includedProperties.Split(',', StringSplitOptions.RemoveEmptyEntries);
foreach (var property in properties)
{
query.Include(property);
}
}
return query;
}

我认为您需要更改为以下

query =query.Include(property);

感谢@Alen。托马发现了原始代码中缺失的任务。

在原始代码中,只要我们使用Enumerable。其中(…(,数据库上的原始查询不能再修改,因为我们已经在C#中过滤了对象。这意味着query.Include作用于Enumerable的结果。其中,对原始数据库查询不是,因此没有所需的效果。

完整修改代码:

public IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> order = null,
string includedProperties = null)
{
IQueryable<TEntity> query = _context.Set<TEntity>();
if (filter is not null)
{
query = query.Where(filter);
}
if (order is not null)
{
query = order(query);
}
if (includedProperties is not null)
{
var properties = includedProperties.Split(',', StringSplitOptions.RemoveEmptyEntries);
foreach (var property in properties)
{
query = query.Include(property);
}
}
return query;
}

最新更新