首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么SQL查询中没有WHERE子句?

为什么SQL查询中没有WHERE子句?
EN

Stack Overflow用户
提问于 2013-03-01 21:25:19
回答 4查看 411关注 0票数 2

我有个奇怪的问题。我注意到下面定义的代码:

代码语言:javascript
复制
var query= unitOfWork.Session.CreateCriteria(typeof (SomeEntity)).Future<SomeEntity>().AsQueryable();
var queryWithWhere= query.Where(x => x.SomeProperty.ToLower().Contains("Xxx".ToLower()));
var result= queryWithWhere.ToList();

给出了正确的结果,但是我在NHibernateProfiler中看到的SQL查询不包含where子句,它只是

代码语言:javascript
复制
SELECT ... 
FROM SomeEntity

我的代码中的这个WHERE似乎是在SQL查询运行之后使用的,就像Linq-to-Objects而不是Linq-to-SQL。

当然,SQL查询是在第三行继续之后开始的。

EN

回答 4

Stack Overflow用户

发布于 2013-03-01 21:56:37

如果您想使用Linq,并让NHibernate理解它,那么使用CreateQuery<T>扩展( NHibernate的一部分,在NHibernate.Linq名称空间中)来直接创建一个IQueryable<T>,而不是使用CreateCriteria<T> -正如您已经注意到的,它只允许您编写NHibernate将作为约束处理的查询部分。

票数 2
EN

Stack Overflow用户

发布于 2013-03-01 21:34:59

如果您希望在第一个查询中包含WHERE,我认为您需要添加一个限制:

代码语言:javascript
复制
 unitOfWork.Session.CreateCriteria<SomeEntity>()
    .Add(Restrictions.Eq("SomeProperty", "Some Value"))

干杯

编辑

或者更适合你

代码语言:javascript
复制
 unitOfWork.Session.CreateCriteria<SomeEntity>()
    .Add(Restrictions.InsensitiveLike("SomeProperty", "Some Value"))
票数 1
EN

Stack Overflow用户

发布于 2013-03-02 00:08:24

由于AsQueryable()导致集合被加载并强制转换为IQueryable,NHibernate将实例化结果集。有关实体框架中的类似行为,请参见this question

我将重写您的查询以使用NHibernate的LINQ提供程序:

代码语言:javascript
复制
var result = session.Query<SomeEntity>()
                    .Where(x => x.SomeProperty.ToLower().Contains("Xxx".ToLower)));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15158871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档