使用 Dapper 的内连接获取数据

Inf*_*fii 4 c# orm dapper micro-orm

我正在一个项目上进行数据库操作并开发 WinForms 应用程序 C#,我正在使用 Dapper 从数据库中获取数据,我陷入了需要使用内部联接检索数据的情况。例如。我有两个表 Authors 和 Book 如下:

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; }
}
Run Code Online (Sandbox Code Playgroud)

现在在 SQL Server 中,我可以使用以下查询轻松地从中获取数据:

select B.Title,b.Description,b.Price,A.AuthorName from author A inner join book B on A.AuthorId = B.Authorid
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使用简洁的多重映射来做到这一点,我也看到了类似 这样的文章,但无法理解它是如何工作和分割的。如果我能在我的课堂设计中得到相同的解决方案,我会很棒。感谢。

这是我想要的输出:ResultSet

Pal*_*Due 5

根据您链接的结果,您可以执行以下操作:

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");
Run Code Online (Sandbox Code Playgroud)

或者您可以使用动态类型。

如果您想收藏带有作者的书籍,那就另当别论了。然后你会这样做(为了示例选择 *):

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");
Run Code Online (Sandbox Code Playgroud)

splitOn参数应该这样理解:如果所有列按照查询中的顺序从左到右排列,则左侧的值属于第一类,右侧的值属于第二类。