C# EF Linq SQL生成的联合太多(每个包含)
我使用的是代码优先的方法,我的模型有一些集合C# EF Linq SQL生成的联合太多(每个包含),c#,linq,entity-framework,C#,Linq,Entity Framework,我使用的是代码优先的方法,我的模型有一些集合 /// <summary> /// Gets or sets projects. /// </summary> [JsonConverter(typeof(IDWriteListConverter))] public virtual ICollection<Project> Projects { get; set; }
/// <summary>
/// Gets or sets projects.
/// </summary>
[JsonConverter(typeof(IDWriteListConverter))]
public virtual ICollection<Project> Projects { get; set; }
/// <summary>
/// Gets or sets requests.
/// </summary>
[JsonConverter(typeof(IDWriteListConverter))]
public virtual ICollection<Request> Requests { get; set; }
/// <summary>
/// Gets or sets comments.
/// </summary>
[JsonConverter(typeof(IDWriteListConverter))]
public virtual ICollection<Comment> Comments { get; set; }
/// <summary>
/// Gets or sets roles.
/// </summary>
[JsonConverter(typeof(IDWriteListConverter))]
public ICollection<SecurityRole> Roles { get; set; }
/// <summary>
/// Gets or sets tasks.
/// </summary>
[JsonConverter(typeof(IDWriteListConverter))]
public ICollection<SecurityTask> Tasks { get; set; }
更新:
基于以下建议:为什么我不能使用Join,因为我有一个GenericRepository,它负责使用Include方法包含任何类型的集合属性
以下是代码供您参考:
public virtual IQueryable<TEntity> Get(Expression<Func<TEntity, bool>> filter = null, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null, string includeProperties = "", int skip = 0, int take = 0)
{
IQueryable<TEntity> query = _databaseSet;
if (query != null)
{
if (filter != null)
{
query = query.Where(filter);
}
if (includeProperties == null)
{
includeProperties = string.Empty;
}
query = includeProperties.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Aggregate(query, (current, property) => current.Include(property));
if (orderBy != null)
{
query = orderBy(query);
if (take != 0)
{
query = query.Skip(skip).Take(take);
}
else if (skip > 0)
{
query = query.Skip(skip);
}
}
}
return query;
}
public virtual IQueryable Get(表达式filter=null,Func orderBy=null,字符串includeProperties=“”,int skip=0,int take=0)
{
IQueryable查询=_数据库集;
if(查询!=null)
{
if(过滤器!=null)
{
query=query.Where(过滤器);
}
if(includeProperties==null)
{
includeProperties=string.Empty;
}
query=includeProperties.Split(新[]{',},StringSplitOptions.RemoveEmptyEntries).Aggregate(查询,(当前,属性)=>current.Include(属性));
if(orderBy!=null)
{
query=orderBy(查询);
如果(取!=0)
{
query=query.Skip(Skip).Take(Take);
}
否则如果(跳过>0)
{
query=query.Skip(Skip);
}
}
}
返回查询;
}
使用连接而不是Include@EhsanSajjad我使用泛型repo作为基类,它包含include,子类只告诉它要加载的依赖项列表。子类通过使用类型属于ICollection的反射来了解依赖项列表。这样我就不需要告诉你要包括什么了。有没有办法通过Join动态定义这些内容?@EhsanSajjad刚刚更新了上面的代码,请参阅。
public virtual IQueryable<TEntity> Get(Expression<Func<TEntity, bool>> filter = null, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null, string includeProperties = "", int skip = 0, int take = 0)
{
IQueryable<TEntity> query = _databaseSet;
if (query != null)
{
if (filter != null)
{
query = query.Where(filter);
}
if (includeProperties == null)
{
includeProperties = string.Empty;
}
query = includeProperties.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Aggregate(query, (current, property) => current.Include(property));
if (orderBy != null)
{
query = orderBy(query);
if (take != 0)
{
query = query.Skip(skip).Take(take);
}
else if (skip > 0)
{
query = query.Skip(skip);
}
}
}
return query;
}