Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Dapper使用内部联接获取数据_C#_Orm_Dapper_Micro Orm - Fatal编程技术网

C# 从Dapper使用内部联接获取数据

C# 从Dapper使用内部联接获取数据,c#,orm,dapper,micro-orm,C#,Orm,Dapper,Micro Orm,我正在一个项目上进行数据库操作,并开发WinForms应用程序C,我正在使用Dapper从数据库中获取数据,我被困在需要使用内部连接检索数据的情况下。我有两张表格,作者和书如下: public class Authors { public int AuthorId { get; set; } public string AuthorName { get; set; } } public class Book { public int BookId { get; set;

我正在一个项目上进行数据库操作,并开发WinForms应用程序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实现这一点,我也看到过类似的文章,但无法理解它是如何工作和拆分的。如果我能用我的课堂设计得到同样的解决方案,我会很好。 谢谢


这是我想要的输出:

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

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参数应该理解如下:如果所有列都按照查询中的顺序从左到右排列,那么左边的值属于第一类,右边的值属于第二类。

您有没有一个基准测试显示LINQtoSQL和Entity Framework对于您的应用程序来说都太慢了?您希望得到什么结果?SQL中的值对或所有导航属性和集合都已填充的实体,但在您的模型中我看不到它们?@AluanHaddad请检查此链接@arekzyla我只想填充我的集合,我用我想要的结果更新问题。Thanks@Infii但是,您想拥有一个作者和图书类的集合,还是想要一些带有标题、描述、价格和AuthorName的DTO类?