2010-03-24 142 views

回答

1

在我發佈這個問題後,我就回答了問題。 PredicateBuilder來救援!

這是我的代碼,它使用PredicateBuilder。它被設置爲一個擴展方法:

public static IQueryable<Note> WhereContainsAnyTags(this IQueryable<Note> notes, IEnumerable<Tag> searchTags) 
{ 
    // Initialize 
    var predicate = PredicateBuilder.False<Note>(); 

    // Select Notes that contain any search Tags 
    foreach (var searchTag in searchTags) 
    { 
     var tag = searchTag; 
     predicate = predicate.Or(note => note.Tags.Any(t => t.Id == tag.Id)); 
    } 

    // Set return value 
    return notes.AsExpandable().Where(predicate); 
} 

這裏是我如何調用代碼:

searchResults = m_ViewModel.ObjectContext.Notes.WhereContainsAnyTags(m_ViewModel.SearchTags); 
0

不知道這是否會工作或沒有,但值得一試反正我想,如果你已經在使用WhereIn

var posts = context.Tags.WhereIn(tag => tag.Name, acceptableValues) 
         .SelectMany(t => t.Posts); 

WhereIn應該給大家,是名稱的一部分的標籤,與SelectMany應該給你含有這些標籤的所有信息。

0

你可以ASLO做這樣的與實體SQL

var post = ctx.Posts.Where("it.Tags.Id IN (1,2,3)");