我正在研究一个项目上的数据库操作并开发WinForms App C#,我正在使用Dapper从数据库中获取数据,我遇到了需要使用内连接检索数据的情况。例如。我有两个表作者和书如下:
public class Authors
{
public int AuthorId { get; set; }
public string AuthorName { get; set; }
}
public class Book
{
public int BookId { get; set; }
public string AuthorId { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public int Price { get; set; }
}
现在在SQL Server中,我可以使用以下查询轻松地从中获取数据:
select B.Title,b.Description,b.Price,A.AuthorName from author A inner join book B on A.AuthorId = B.Authorid
但是我不知道如何使用dapper multi mapping进行此操作,我也看到像This这样的文章,但无法理解它是如何工作和分裂的。如果我可以用我的班级设计获得相同的解决方案,我会很棒。 感谢。
这是我想要的输出:ResultSet
答案 0 :(得分:2)
根据您已关联的结果,您可以执行以下操作:
public class Result
{
public string Title { get; set; }
public string Description { get; set; }
public int Price { get; set; }
public string AuthorName { get; set; }
}
connection.Query<Result>("SELECT B.Title,B.Description,B.Price,A.AuthorName FROM Author A INNER JOIN Book B on A.AuthorId = B.Authorid");
或者您可以使用动态类型。
如果你想与他们的作者一起收藏一本书,这是另一个故事。然后你会这样做(为示例选择*):
var sql = "SELECT * FROM Author A INNER JOIN Book B on A.AuthorId = B.Authorid";
var result = connection.Query<Book, Author, Book>(sql,
(b, a) => { b.Author = a; return b; }, splitOn: "AuthorId");
splitOn参数应该理解为:如果所有列按查询顺序从左到右排列,则左侧的值属于第一个类,右侧的值属于到第二节课。