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