【问题标题】:Select second row in a join LINQ statement在连接 LINQ 语句中选择第二行
【发布时间】:2014-09-12 18:22:09
【问题描述】:

Books 和 Authors 数据集之间存在一对多的关系。如何使用 LINQ 选择本书的第二作者(如果只有一个作者,则为 null)。我不想做“左加入”,因为我只想归还作者的书。有些书没有作者。

var books = from b in db.Books
             join a in db.Authors on b.Id equals a.BookId
            select new {
               Book = b,
               SecondAuthor = a ??? 
            }

【问题讨论】:

  • 一对多的关系如何?听起来你有很多作者有很多书。除非每个作者只能与一本书相关联,但这没有多大意义。

标签: c# linq


【解决方案1】:

因此,第一件事是您应该使用组连接,而不是常规连接,这样您就可以将所有作者作为一个集合,而不是将其扁平化为每个匹配对的单独行。从该集合中,您可以获得第二项:

var books = from b in db.Books
            join a in db.Authors on b.Id equals a.BookId
            into authors
            select new {
               Book = b,
               SecondAuthor = authors.Skip(1).FirstOrDefault(),
            };

【讨论】:

  • 哦,天哪..我很震惊,但我不记得skip().:)
  • 谢谢!这看起来很棒。在上面的示例中,如果我将代码保持原样(显然删除了问号)。哪个作者将被分配给 SecondAuthor。它似乎编译得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-04
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-14
相关资源
最近更新 更多