22

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

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

私は自分のプロジェクトで同じ問題を抱えていて、解決策を見つけました:

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 に答える
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 に答える
8

NH 4 (そしておそらく少し前) では、組み込みのLike文字列拡張をNHibernate.Linq名前空間内で使用できます: Like(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 に答える