2014-09-12 54 views
0

我在Books和Authors数据集之间有一对多的关系。如何使用LINQ选择本书的第二作者(如果只有一位作者,则为null)。我不想做一个“左连接”,因为我只想和作者交回书籍。有些书没有作者。在连接中选择第二行LINQ语句

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

这是一个多对多的关系吗?听起来你有很多作家的书籍。除非每个作者只能与1本书关联,但这没有多大意义。 – itsme86 2014-09-12 18:26:31

回答

4

所以第一件事情是,你应该使用一组加入,而不是一个常规加入,让你得到所有的作者作为一个集合,而不是扁平的是分成几行以每个匹配对。从该集合中你可以得到第二个项目:

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(), 
      }; 
+1

oh gosh ..我正在引起我的注意,但coudl'nt记得''skip()''。:) – 2014-09-12 18:30:58

+0

谢谢!这看起来不错。在我上面的例子中,如果我保持原样(显然删除问号)。哪位作者将被分配给SecondAuthor。它似乎编译好。 – user3040068 2014-09-12 18:44:38