22

如何使用 NHibernate.Linq 生成此查询?

WHERE this_.Name LIKE @p0; @p0 = 'test'  // Notice NO % wild card

请注意,这不是 Linq To Sql 或实体框架。这是NHibernate。

编辑:

这是使用 ICriteria 的所需查询:

criteria.Add(Expression.Like("Name", "test"));
return criteria.List<Theater>();
4

4 回答 4

26

虽然这已被标记为已解决,这在当时是正确的,但我还要注意 NHibernate 现在有一些扩展,因此您可以执行以下操作:

Session.QueryOver<MyEntity>()
    .Where(x => x.Property.IsLike("something", MatchMode.Anywhere))
    .List();

这将为LIKE '%something%'您做一个。

于 2012-10-24T16:19:17.490 回答
17

我相信这就是您正在寻找的:

var theaters = from theater in Session.Linq<Theater>() 
               where theater.Name.Contains("test") 
               select theater;

根据我的测试,它会生成一条 SQL 'LIKE' 语句:“... WHERE Theater.Name LIKE %test%”

这正是您提供的条件片段的输出。

于 2009-11-08T22:15:41.927 回答
17

我在我的项目中遇到了同样的问题并找到了解决方案:

session.Linq<Theater>()
    .Where(x => x.Name.StartsWith("test") && x.Name.EndsWith("test");

这在 SQL 中转换为

SELECT ... WHERE Name LIKE '%test' AND Name LIKE 'test%'
于 2010-09-30T19:24:25.670 回答
8

使用 NH 4(可能更早一点),在命名空间中提供了一个内置的Like字符串扩展NHibernate.LinqLike(this string matchExpression, string sqlLikePattern). (它在NHibernate.Linq.SqlMethods扩展类上定义。)

using NHibernate.Linq;
...
session.Query<Theater>()
    .Where(t => t.Name.Like("test"));
于 2016-03-24T07:05:59.290 回答