我使用VS2012
和SQL Server 2012
,我在项目中使用Dapper
。
我在SQL服务器中有两个主要详细信息的表。
我从每个表中都有两个域类。
我想执行一个这样的查询:
SELECT *
FROM dbo.ATest
LEFT JOIN dbo.BTable ON dbo.ATest.Id = dbo.BTable.IdA
然后将该地图结果发给我的班级。
我的域类是这样的:
public class BTable
{
public int Id { get; set; }
public string NameB { get; set; }
public string Tel { get; set; }
public ATest ATest { get; set; }
}
public class ATest
{
public SexEnum Sex { get; set; }
public int Id { get; set; }
public string Name { get; set; }
public IList<BTable> BTable { get; set; }
}
public enum SexEnum
{
Mard = 0, Zan = 1
}
我用过这一行
const string connectionStr = @"Server=PCClient;
Database=Dapper;User Id=sa;Password=sa;";
SqlConnection sqlConn = new SqlConnection(connectionStr);
sqlConn.Open();
string command = @"SELECT ATest.*,Split='',BTable.*
FROM dbo.ATest
LEFT JOIN dbo.BTable ON dbo.ATest.Id = dbo.BTable.IdA";
var testList = Dapper.SqlMapper.Query<ATest, BTable, Tuple<ATest, BTable>>(
sqlConn, command,
(aTest, bTable) =>
Tuple.Create(aTest, bTable), splitOn: "Split").ToList();
但它不能正常工作,因为在这种情况下,我有一个匿名列表,有两个列表被激怒。
然后我用这个:
string command = @"SELECT ATest.*,BTable.*
FROM dbo.ATest
LEFT JOIN dbo.BTable ON dbo.ATest.Id = dbo.BTable.IdA";
List<BTable> testList = Dapper.SqlMapper.Query<BTable, ATest, BTable>(sqlConn, command,
(bTable, aTest) => { bTable.ATest = aTest;
return bTable;
}).ToList();
在这种状态下我有一个bTable
列表,每行有一个Atest对象。
但是我需要一个Ilist的对象,它有一个BTable列表。
如何使用dapper转换一个已加入多个类的Query的结果?