簡體   English   中英

如何使用LINQ在NHibernate 3中實現關鍵字搜索?

[英]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; }
}

我想做的是為用戶提供在CaptionDescriptionNotes屬性上搜索多個關鍵字的能力。 換句話說,如果用戶搜索“ 蘋果香蕉 ”,則應該搜索三個字符串屬性,以查看其中是否包含“ 蘋果 ”和“ 香蕉 ”。

我嘗試了以下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.

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