2011-02-23 49 views
4

我正在使用LinqKit PredicateBuilder(http://www.albahari.com/nutshell/predicatebuilder.aspx)進行搜索的方法。這是怎樣的關係是建立(實體框架4 CPT 5 POCO):LinqKit PredicateBuilder與EF 4 CPT 5表關係?

public class MusicSheet 
{ 
    [Key] 
    public int ID { get; set; } 
    public string Title { get; set; } 
    public string Key { get; set; } 

    public virtual ICollection<Author> Authors { get; set; } 
} 

public class Author 
{ 
    [Key] 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public string Bio { get; set; } 

    public virtual ICollection<MusicSheet> MusicSheets { get; set; } 
} 

我需要能夠構建爲MusicSheet檢查(在Title包含特定檢索詞)還有Name謂語或可能包含該搜索詞的作者的Bio。這是我目前有:

var predicate = PredicateBuilder.False<MusicSheet>(); 
foreach (var term in terms) 
{ 
    string keyword = term; 

    predicate = predicate 
    .Or(s => s.Title.Contains(keyword)); 
    // TODO Check for Author Name & Bio 
} 

有什麼建議嗎?非常感謝你。

回答

1

你有沒有嘗試過這樣的:

var predicate = PredicateBuilder.False<MusicSheet>(); 
foreach (var term in terms) 
{ 
    string keyword = term; 

    predicate = predicate 
     .Or(s => s.Title.Contains(keyword) || 
       s.Authors.Any (a => a.Name.Contains(keyword) || a.Bio.Contains(keyword))); 
} 
+0

喬你好,非常感謝你的幫助。我有一個關於使用「或者」方法的問題。我應該按照上面顯示的方式來做,或者像這樣:'predicate = predicate.Or(s => s.Title.Contains(keyword))。或者(s => s.Authors.Any(a => a .Name.Contains(keyword)))......「或者它們實際上是相同的(使用多個」或「與」||「)?再次感謝。 – Saxman 2011-02-24 15:49:34

+0

我會使用||當你可以的時候:結果表達式樹會更簡單。 – 2011-02-25 01:54:12