[英]How do I implement keyword searching in NHibernate 3 using LINQ?
我有一個看起來像這樣的實體:
public class Media
{
public virtual string Caption { get; set; }
public virtual string Description { get; set; }
public virtual string Notes { get; set; }
}
我想做的是為用戶提供在Caption
, Description
和Notes
屬性上搜索多個關鍵字的能力。 換句話說,如果用戶搜索“ 蘋果香蕉 ”,則應該搜索三個字符串屬性,以查看其中是否包含“ 蘋果 ”和“ 香蕉 ”。
我嘗試了以下LINQ語句作為測試:
var query = new[] { "apple", "banana" };
// GetAll<T> returns an IQueryable<T>
repo.GetAll<Media>().Where(x => query.All(x.Caption.Contains));
但是我遇到一個例外:
ArgumentException:無法將類型為System.Linq.Expressions.UnaryExpression的對象轉換為類型為System.Linq.Expressions.LambdaExpression的對象。
我知道NHib 3.0的LINQ提供程序不能實現LINQ的所有功能。 我將如何重寫此LINQ查詢,使其與NHibernate LINQ兼容?
請記住,即使您想出如何最佳地使用Linq進行操作,從本質上講,它仍將轉換為一條SQL語句,根據定義,該語句看起來將如下所示:
(標題為'%apple%'和標題為'%banana'%)或(說明為'%apple%'和說明為'%banana%').. etc
或者,當然,次優方法可能會導致返回每條記錄,然后在本地評估條件。
我的建議是研究NHibernate.Search,它使用Lucene索引引擎作為后端。 我認為這將與您的工作更加協調一致。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.