Я пытаюсь написать метод расширения
для рефакторинга я пишу запрос 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;
}
Мы будем очень признательны за любую помощь в написании этого метода расширения
или любого другого более эффективного способа выполнения этого запроса.