我剛剛開始使用LINQ。我正在創建一個使用規範Post
和Tag
模型的實體框架應用程序。 A Post
包含ID
,Text
和Tags
,並且Tag
包含ID
,Name
和Posts
。標籤系統的LINQ查詢:匹配任何幾個標籤?
一個previous thread on StackOverflow教我如何查詢一個Post
在搜索列表匹配所有Tag
對象(A 和乙和 C)。但如何查詢Post
匹配任何Tag
(A 或 B 或 C)在列表中?謝謝你的幫助。
我剛剛開始使用LINQ。我正在創建一個使用規範Post
和Tag
模型的實體框架應用程序。 A Post
包含ID
,Text
和Tags
,並且Tag
包含ID
,Name
和Posts
。標籤系統的LINQ查詢:匹配任何幾個標籤?
一個previous thread on StackOverflow教我如何查詢一個Post
在搜索列表匹配所有Tag
對象(A 和乙和 C)。但如何查詢Post
匹配任何Tag
(A 或 B 或 C)在列表中?謝謝你的幫助。
在我發佈這個問題後,我就回答了問題。 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);
不知道這是否會工作或沒有,但值得一試反正我想,如果你已經在使用WhereIn
。
var posts = context.Tags.WhereIn(tag => tag.Name, acceptableValues)
.SelectMany(t => t.Posts);
的WhereIn
應該給大家,是名稱的一部分的標籤,與SelectMany
應該給你含有這些標籤的所有信息。
你可以ASLO做這樣的與實體SQL
var post = ctx.Posts.Where("it.Tags.Id IN (1,2,3)");