FreeSql (十七)联表查询

匿名 (未验证) 提交于 2019-12-03 00:08:02

FreeSql在查询数据下足了功能,链式查询语法、多表查询、表达式函数支持得非常到位。

IFreeSql fsql = new FreeSql.FreeSqlBuilder()     .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")     .Build();  [Table(Name = "tb_topic")] class Topic {     [Column(IsIdentity = true, IsPrimary = true)]     public int Id { get; set; }     public int Clicks { get; set; }     public int TestTypeInfoGuid { get; set; }     public TestTypeInfo Type { get; set; }     public string Title { get; set; }     public DateTime CreateTime { get; set; } } class TestTypeInfo {     public int Guid { get; set; }     public int ParentId { get; set; }     public TestTypeParentInfo Parent { get; set; }     public string Name { get; set; }     public List<Topic> Topics { get; set; } } class TestTypeParentInfo {     public int Id { get; set; }     public string Name { get; set; } }  ISelect<Topic> select => fsql.Select<Topic>();
sql = select.LeftJoin(a => a.Type.Guid == a.TestTypeInfoGuid).ToSql(); //SELECT a.`Id`, a.`Clicks`, a.`TestTypeInfoGuid`, a__Type.`Guid`, a__Type.`ParentId`, a__Type.`Name`, a.`Title`, a.`CreateTime`  //FROM `tb_topic` a  //LEFT JOIN `TestTypeInfo` a__Type ON a__Type.`Guid` = a.`TestTypeInfoGuid`  sql = select     .LeftJoin(a => a.Type.Guid == a.TestTypeInfoGuid)     .LeftJoin(a => a.Type.Parent.Id == a.Type.ParentId).ToSql(); //SELECT a.`Id`, a.`Clicks`, a.`TestTypeInfoGuid`, a__Type.`Guid`, a__Type.`ParentId`, a__Type.`Name`, a.`Title`, a.`CreateTime`  //FROM `tb_topic` a  //LEFT JOIN `TestTypeInfo` a__Type ON a__Type.`Guid` = a.`TestTypeInfoGuid`  //LEFT JOIN `TestTypeParentInfo` a__Type__Parent ON a__Type__Parent.`Id` = a__Type.`ParentId`
sql = select.LeftJoin<TestTypeInfo>((a, b) => b.Guid == a.TestTypeInfoGuid).ToSql(); //SELECT a.`Id`, a.`Clicks`, a.`TestTypeInfoGuid`, b.`Guid`, b.`ParentId`, b.`Name`, a.`Title`, a.`CreateTime`  //FROM `tb_topic` a  //LEFT JOIN `TestTypeInfo` b ON b.`Guid` = a.`TestTypeInfoGuid`  sql = select     .LeftJoin<TestTypeInfo>((a, b) => b.Guid == a.TestTypeInfoGuid)     .LeftJoin<TestTypeParentInfo>((a, c) => c.Id == a.Type.ParentId).ToSql(); //SELECT a.`Id`, a.`Clicks`, a.`TestTypeInfoGuid`, b.`Guid`, b.`ParentId`, b.`Name`, a.`Title`, a.`CreateTime`  //FROM `tb_topic` a  //LEFT JOIN `TestTypeInfo` b ON b.`Guid` = a.`TestTypeInfoGuid`  //LEFT JOIN `TestTypeParentInfo` c ON c.`Id` = b.`ParentId`
sql = select.From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s     .LeftJoin(a => a.TestTypeInfoGuid == b.Guid)     .LeftJoin(a => b.ParentId == c.Id)).ToSql(); //SELECT a.`Id`, a.`Clicks`, a.`TestTypeInfoGuid`, b.`Guid`, b.`ParentId`, b.`Name`, a.`Title`, a.`CreateTime`  //FROM `tb_topic` a  //LEFT JOIN `TestTypeInfo` b ON a.`TestTypeInfoGuid` = b.`Guid`  //LEFT JOIN `TestTypeParentInfo` c ON b.`ParentId` = c.`Id`

或者:

sql = fsql.Select<Topic, TestTypeInfo, TestTypeParentInfo>()     .LeftJoin((a, b, c) => a.TestTypeInfoGuid == b.Guid)     .LeftJoin((a, b, c) => b.ParentId == c.Id).ToSql(); //SELECT a.`Id`, a.`Clicks`, a.`TestTypeInfoGuid`, b.`Guid`, b.`ParentId`, b.`Name`, a.`Title`, a.`CreateTime`  //FROM `tb_topic` a  //LEFT JOIN `TestTypeInfo` b ON a.`TestTypeInfoGuid` = b.`Guid`  //LEFT JOIN `TestTypeParentInfo` c ON b.`ParentId` = c.`Id`
sql = select.LeftJoin("TestTypeInfo b on b.Guid = a.TestTypeInfoGuid and b.Name = ?bname", new { bname = "xxx" }).ToSql(); //SELECT a.`Id`, a.`Clicks`, a.`TestTypeInfoGuid`, a.`Title`, a.`CreateTime`  //FROM `tb_topic` a  //LEFT JOIN TestTypeInfo b on b.Guid = a.TestTypeInfoGuid and b.Name = ?bname
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!