代码之家  ›  专栏  ›  技术社区  ›  mxmissile

NHibernate.Linq型

  •  22
  • mxmissile  · 技术社区  · 15 年前

    如何使用nhibernate.linq生成此查询?

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

    注意,这不是linq to sql或实体框架。这是氨气。

    编辑:

    下面是使用icriteria的所需查询:

    criteria.Add(Expression.Like("Name", "test"));
    return criteria.List<Theater>();
    
    4 回复  |  直到 8 年前
        1
  •  6
  •   Frédéric    8 年前

    使用NH4(可能更早一点),内置 Like 字符串扩展在 NHibernate.Linq 命名空间: Like(this string matchExpression, string sqlLikePattern) . (定义于 NHibernate.Linq.SqlMethods 扩展类。)

    using NHibernate.Linq;
    ...
    session.Query<Theater>()
        .Where(t => t.Name.Like("test"));
    
        2
  •  22
  •   Kieran Senior    12 年前

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

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

    这样做会 LIKE '%something%' 为你。

        3
  •  17
  •   tolism7    15 年前

    我相信这就是你想要的:

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

    根据我的测试,它生成一个SQL“like”语句: “……”where theater.name如%test%“

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

        4
  •  16
  •   CMerat    14 年前

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

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

    这在SQL中转换为

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