NHibernate.Linq LIKE

时间:2009-11-06 19:08:24

标签: linq nhibernate linq-to-nhibernate

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

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

注意,这不是Linq To Sql或Entity Framework。这是NHibernate。

修改

以下是使用ICriteria的所需查询:

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

4 个答案:

答案 0 :(得分:22)

虽然这已被标记为已解决,但当时是正确的,我可能还会注意到NHibernate现在有一些扩展,所以你可以做到以下几点:

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

这将为你做LIKE '%something%'

答案 1 :(得分:17)

我相信这就是你要找的东西:

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

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

这正是您提供的条件摘要的输出。

答案 2 :(得分:16)

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

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

这在SQL中转换为

SELECT ... WHERE Name LIKE '%test' AND Name LIKE 'test%'

答案 3 :(得分:6)

使用NH 4(可能更早一点),$('<div role="tabpanel" class="tab-pane fade" id="'+ tabId + '">' + '<div class="projectContent">' + '<ul class="blockList list-unstyled draggableList">' + '${ projectContent }' + '</ul>' + '<div class="table-hover addBlock">' + 'add block <span id="addBlockGlyp" class="glyphicon glyphicon-plus" aria-hidden="true"></span>' + '</div></div>' + '</div>').appendTo('.projectTab-content'); 命名空间中可以使用内置的Like字符串扩展名:NHibernate.Linq。 (它在NHibernate.Linq.SqlMethods扩展类上定义。)

Like(this string matchExpression, string sqlLikePattern)