У меня есть 3 класса (упрощенно для этого вопроса):
public class Page
{
public Guid PageUid;
public string PageTitle;
public IQueryable<Keyword> Keywords;
}
public class News
public Guid NewsUid;
public string NewsTitle;
public IQueryable<Keyword> Keywords;
}
public class Keyword
public Guid KeywordUid;
public string KeywordTitle;
}
Я хочу перечислить все записи новостей на странице, где все (не любые) ключевые слова этой страницы соответствуют некоторым или всемключевые слова новостей.На странице должны отображаться только новости, где все ключевые слова страницы присутствуют в новостях.Если одно из ключевых слов страницы отсутствует в новостях, эта запись не должна отображаться.Но если в новостной записи больше ключевых слов, чем на странице, новость должна отображаться - если ключевые слова страницы также присутствуют в списке ключевых слов этой новости.Если нет, то новости, конечно, не должны быть перечислены.
Довольно сложно объяснить, я пытаюсь набросать реальный пример для лучшего понимания:
Пример:
Определения:
- PageA has 1 keyword: Kw1
- PageB has 2 keywords: Kw1, Kw2
- PageC has 2 keywords: Kw1, Kw3
- PageD has 3 keywords: Kw1, Kw2, Kw3
- NewsW has 1 keyword: Kw1
- NewsX has 2 keywords: Kw1, Kw2
- NewsY has 2 keywords: Kw1, Kw3
- NewsZ has 3 keywords: Kw1, Kw2, Kw4
Результаты должны быть:
- PageA displays 4 items: NewsW, NewsX, NewsY, NewsZ
- PageB lists 2 news: NewsX, NewsZ
- PageC shows only 1 entry: NewsY
- PageD has not even one match.
Элементом 'linking' является строка 'KeywordTitle', а не Guid«KeywordGuid» или просто «Keyword» -объект, потому что ключевые слова должны совпадать, если только заголовок (строка) идентичен.
В действительности 3 класса являются таблицами в базе данных.Я подключаюсь к базе данных с EntityFramework.Язык C #.Проект является веб-сайтом ASP.NET MVC 3.
Решением для моей проблемы должен быть LINQ-запрос, если это возможно.
Надеюсь, у кого-то есть решение для этого - я пробовал так много разных вещей, но безуспешно.
Заранее спасибо за помощь.
DanielD