簡體   English   中英

NHibernate.Linq LIKE

[英]NHibernate.Linq LIKE

如何使用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>();

雖然這已被標記為已解決,但當時是正確的,我可能還注意到NHibernate現在有一些擴展,所以你可以做以下事情:

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

這將為你做一個LIKE '%something%'

我相信這就是你要找的東西:

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

根據我的測試,它生成一個SQL'LIKE'語句:“... WHERE theater.Name LIKE%test%”

這正是您提供的標准片段的輸出。

我在項目中遇到了同樣的問題並找到了解決方案:

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

這在SQL中轉換為

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

使用NH 4(可能稍早一點), NHibernate.Linq命名空間中可以使用內置的Like字符串擴展: Like(this string matchExpression, string sqlLikePattern) (它在NHibernate.Linq.SqlMethods擴展類上定義。)

using NHibernate.Linq;
...
session.Query<Theater>()
    .Where(t => t.Name.Like("test"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM