我有3个班(简化了这个问题):字符串匹配的两个枚举在LINQ查询
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.
The 'linked'元素是字符串'KeywordTitle',而不是Guid'KeywordGuid'或'Keyword'对象,因为如果标题(字符串)是相同的,则关键字应该匹配。
实际上,3个类是数据库中的表。我用EntityFramework连接到数据库。该语言是C#。该项目是一个ASP.NET MVC 3网站。
如果可能,我的问题的解决方案应该是LINQ查询。
我希望有人有这个解决方案 - 我尝试了很多不同的东西,但没有成功。
在此先感谢您的帮助。
DanielD
这适用于PageA,PageB,PageC情况下的上例。 PageD不幸地显示新闻条目,尽管它不应该是因为这三个关键字Kw1,Kw2,Kw3没有出现在任何新闻中。 – 2011-06-08 23:28:17
不,PageD不会使用此代码显示任何新闻条目。 – svick 2011-06-08 23:40:55
好吧,@svick,看起来你是对的。 Mea culpa!这是我的错。 但我在我的一个更复杂的实际代码中试了一下,在我的下面的代码中有一个选项显示一些消息,虽然没有消息关键字匹配以防止显示空的新闻页面。 可悲的是又出现了另一个问题:我简单地简化了我的第一个代码示例,我现在更新了它。新问题是,页面和新闻类中没有“KeywordTitles”的列表<>。我有一个链接“关键字”的枚举<>,并且必须匹配这些对象的'KeywordTitle'。 现在我得到一个LINQ错误。 – 2011-06-09 00:18:24