在LINQ查询中匹配两个字符串枚举

在LINQ查询中匹配两个字符串枚举,linq,string,list,match,Linq,String,List,Match,对于这个问题,我简化了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> K

对于这个问题,我简化了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 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.NETMVC3网站

如果可能的话,我的问题的解决方案应该是LINQ查询

我希望有人能解决这个问题——我尝试了很多不同的方法,但都没有成功

提前感谢你的帮助


DanielD

新闻关键字和页面关键字的交集必须生成所有页面关键字。所有页面关键字必须出现在新闻关键字中。我也遇到过类似的情况,下面是我是如何做到的

if (ANews.Keywords.Intersect(APage.Keywords).Count() == APage.Keywords.Count())
{
     // Display news.
}

这假设默认比较器比较关键字的工作方式与预期相同。

我需要一个像斯维克在文章中建议的那样的查询结果“如果”不起作用,因为我有很多消息,而不是只有一条。所以我不能写‘ANews.Keywords…’,因为ANews是元素的枚举。这适用于上面的PageA、PageB、PageC示例。PageD不幸地显示了新闻条目,尽管它不应该显示,因为这3个关键词Kw1、Kw2、Kw3没有出现在任何一条新闻中。好了,@svick,看来你是对的。我有罪!这是我的错。但我在稍微复杂一点的真实代码中尝试了它,在下面的代码中有一个选项显示一些新闻,尽管没有新闻关键字匹配,以防止显示空新闻页面。不幸的是,出现了另一个问题:我对我的第一个代码示例简化得有点太多,现在我更新了它。新的问题是,页面和新闻类中没有“关键字标题”列表。我有一个链接“关键字”的枚举,必须匹配这些对象的“关键字标题”。现在我得到了一个LINQ错误。这是我的最后一个方法,它像一个符咒一样工作——只需一行代码:var NewsOnPage=News.Wheren=>Page.Keywords.Selectt=>t.Title.Allpk=>n.Keywords.Selectk=>k.Title.Containspk;谢谢你,斯维克。
if (ANews.Keywords.Intersect(APage.Keywords).Count() == APage.Keywords.Count())
{
     // Display news.
}
IEnumerable<News> news = …;
Page page = …;
var newsOnPage = news.Where(n => page.Keywords.All(pk => n.Keywords.Contains(pk)));