加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Where子句不包含在SQL查询中

发布时间:2020-12-15 04:32:07 所属栏目:百科 来源:网络整理
导读:我目前正在使用EntityFramework 6.0在C#4.0中创建一个应用程序. 我正在尝试从数据库中检索项目列表,但问题是EF框架生成的SQL查询不包含where子句. 因此,整个表/视图被加载到内存中,只需要10秒钟就可以获得2或3个项目. 下面是我的GenericRepostitory中的方法
我目前正在使用EntityFramework 6.0在C#4.0中创建一个应用程序.

我正在尝试从数据库中检索项目列表,但问题是EF框架生成的SQL查询不包含where子句.

因此,整个表/视图被加载到内存中,只需要10秒钟就可以获得2或3个项目.

下面是我的GenericRepostitory中的方法:

public IList<TEntity> GetList(Func<TEntity,bool> where,params Expression<Func<TEntity,object>>[] navigationProperties)
{
    using (var dbContextScope = contextScopeFactory.CreateReadOnly())
    {
        IQueryable<TEntity> dbQuery = Context.Set<TEntity>().AsQueryable();

        foreach (Expression<Func<TEntity,object>> navigationProperty in navigationProperties)
            dbQuery = dbQuery.Include<TEntity,object>(navigationProperty);

        var list = dbQuery
            .AsNoTracking()
            .Where(where);

        Context.Database.Log = s => Debug.WriteLine(s);

        return list.ToList<TEntity>();
    }
}

我称之为:

var repository = repositoryFactory.Get<Context,Entity>();
var items = repository.GetList(x => x.FakeID <= 10);

返回结果很好,但需要大约10秒才能检索到.
当调试写入生成的SQL查询时,where子句无处可去

如何修改我的函数GetList以包含where子句?

我希望我对这些信息足够清楚,我很抱歉我的英语.
这不是我的母语:/

无论如何,谢谢你的帮助

解决方法

从中更改方法签名
GetList(Func<TEntity,...

GetList(Expression<Func<TEntity,bool>> where,...

你仍然可以像现在一样用lambda调用它.Where在数据库中读取的完整列表中用作“linq-to-objects”.使用Expression EF可以读取生成所需的sql.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读