.net 如何使用Linq to Sql从多对多关系中获取不同的记录

.net 如何使用Linq to Sql从多对多关系中获取不同的记录,.net,linq-to-sql,.net,Linq To Sql,为简洁起见,假设我有以下3个表(m:n):文章、主题和一个连接表ArticleTopic。我需要获得n个主题的前n篇文章。对于整个结果集,每篇文章只能显示一次 文章: -身份证 -头衔 主题: -身份证 -名字 文章主题: -身份证 -文章ID -托皮西德 谢谢你的帮助 topics .SelectMany(topic => topic.ArticleTopic) .Select(articleTopic => article) .Distinct() 但是我不清

为简洁起见,假设我有以下3个表(m:n):文章、主题和一个连接表ArticleTopic。我需要获得n个主题的前n篇文章。对于整个结果集,每篇文章只能显示一次

文章: -身份证 -头衔

主题: -身份证 -名字

文章主题: -身份证 -文章ID -托皮西德

谢谢你的帮助

topics
   .SelectMany(topic => topic.ArticleTopic)
   .Select(articleTopic => article)
   .Distinct()

但是我不清楚你所说的top n是什么意思-我在你的问题中看不到任何排名信息。

因此,如果你的第一篇文章有主题A、B和C,而你的第二篇文章有主题C、D、E和F,你希望你的第二篇文章只显示主题D、E,因为你的第一篇文章已经使用了主题C?只想为2个不同的主题显示3篇不同的文章。还有一个名为ArticleRating的1:n表,其FK为ArticleId和分数。例如,我需要3个主题的前3篇排名最高的文章,但这篇文章不仅应该在每个主题上出现一次,而且应该在整个结果集中出现一次。所有主题的排名最高的文章是什么?那么可能就没有关于某些主题的文章了。每个主题的排名最高的文章?在这种情况下,如果您在多个主题中遇到相同的顶级文章,您如何选择哪个主题“完成”?对于退化的案例,例如三个主题T1、T2、T3,每个主题都有相同的两篇文章A1和A2?只返回两篇偏离“每篇文章只返回一篇”规则的文章,或者返回两篇偏离“每篇文章只返回一次”规则的文章?如果我跟随你,可以说哪个主题“获胜”并不重要。它应该是所有主题中评级最高的文章。如果文章A1和A2显示在T1下(它们也属于T2),那么T2应该是该主题的第三篇热门文章。。。我稍微误解了你的问题。您希望选择n个主题中的前m篇文章。但不完全是这样——如果一篇文章属于多个主题,你只想选择一次,然后为其他主题选择一篇评分较低的文章,对吗?