LinqKit PredicateBuilder с табличными отношениями EF 4 CPT 5? - PullRequest
4 голосов
/ 23 февраля 2011

Я использую LinqKit PredicateBuilder (http://www.albahari.com/nutshell/predicatebuilder.aspx) для метода, который выполняет поиск. Вот как строятся отношения (Entity Framework 4 CPT 5 POCO):

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 Ответ

1 голос
/ 24 февраля 2011

Вы пробовали это:

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)));
}
...