Я пытаюсь написать extension method, чтобы реорганизовать запрос linq many-to-many, который я пишу. Я пытаюсь получить коллекцию Post(s), которые были помечены любым из Tag(s) в коллекции, переданной в качестве параметра для моего метода.
Вот соответствующие объекты вместе с некоторыми из их свойств:
Сообщение
Скалярные свойства:
PostID,PostDateСвойства навигации:
PostTagsPostTag
Скалярные свойства:
PostTagID,PostID,TagIDСвойства навигации:
Post,TagТег
Скалярные свойства:
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;
}
Это (возможно, неправильное) начало extension method, которое я пытаюсь создать:
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;
}
Любая помощь в написании этого extension method или любого другого более эффективного способа выполнения этого запроса будет с благодарностью.