Написание метода расширения для помощи в запросах отношений "многие ко многим"

Я пытаюсь написать метод расширения для рефакторинга я пишу запрос linq "многие ко многим". Я пытаюсь получить коллекцию из сообщений , которые были помечены любым из тегов в коллекции, переданной в качестве параметра моему методу.

Вот соответствующие сущности и некоторые из их свойств:

Сообщение

Скалярные свойства : PostID , PostDate

Свойство навигации : PostTags

PostTag

Скалярные свойства : PostTagID , PostID , TagID

Свойства навигации : Post , Тег

Тег

Скалярные свойства : TagID

Свойство навигации : PostTags

Это тот запрос, который я использую в настоящее время и который хорошо работает:

public IEnumerable<Post> GetPostsByTags(IEnumerable<Tag> tags)
{
    return from pt in context.PostTags
           from t in tags
           where pt.TagID == t.TagID &&
                 pt.Post.PostDate != null
           orderby pt.Post.PostDate descending
           select pt.Post;               
}   

Это (вероятно, неправильный) запуск метода расширения Я пытаюсь создать:

public static IEnumerable<TResult> SelectRange<TSource, TResult>(
    this IEnumerable<TSource> collection,
    Func<IEnumerable<TSource>, IEnumerable<TResult>> selector)
{
    return selector(collection);
}

И идеальное упрощение исходного запроса:

public IEnumerable<Post> GetPostsByTags(IEnumerable<Tag> tags)
{
    return from p in context.Posts
           where p.PostTags.SelectRange(x => ?) &&
                 p.PostDate != null                    
           orderby p.PostDate descending
           select p;
}

Мы будем очень признательны за любую помощь в написании этого метода расширения или любого другого более эффективного способа выполнения этого запроса.

12
задан aligray 17 June 2011 в 10:36
поделиться