Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF Linq SQL生成的联合太多(每个包含)_C#_Linq_Entity Framework - Fatal编程技术网

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;
        }