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联表
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
系列文章导航

*
(一)入门 <https://www.cnblogs.com/FreeSql/p/11531300.html>

*
(二)自动迁移实体 <https://www.cnblogs.com/FreeSql/p/11531301.html>

*
(三)实体特性 <https://www.cnblogs.com/FreeSql/p/11531302.html>

*
(四)实体特性 Fluent Api <https://www.cnblogs.com/FreeSql/p/11531304.html>

*
(五)插入数据 <https://www.cnblogs.com/FreeSql/p/11531306.html>

*
(六)批量插入数据 <https://www.cnblogs.com/FreeSql/p/11531309.html>

*
(七)插入数据时忽略列 <https://www.cnblogs.com/FreeSql/p/11531316.html>

*
(八)插入数据时指定列 <https://www.cnblogs.com/FreeSql/p/11531318.html>

*
(九)删除数据 <https://www.cnblogs.com/FreeSql/p/11531320.html>

*
(十)更新数据 <https://www.cnblogs.com/FreeSql/p/11531321.html>

*
(十一)更新数据 Where <https://www.cnblogs.com/FreeSql/p/11531324.html>

*
(十二)更新数据时指定列 <https://www.cnblogs.com/FreeSql/p/11531327.html>

*
(十三)更新数据时忽略列 <https://www.cnblogs.com/FreeSql/p/11531334.html>

*
(十四)批量更新数据 <https://www.cnblogs.com/FreeSql/p/11531335.html>

*
(十五)查询数据 <https://www.cnblogs.com/FreeSql/p/11531339.html>

*
(十六)分页查询 <https://www.cnblogs.com/FreeSql/p/11531341.html>

*
(十七)联表查询

*
(十八)导航属性 <https://www.cnblogs.com/FreeSql/p/11531352.html>

*
(十九)多表查询 <https://www.cnblogs.com/FreeSql/p/11531362.html>

*
(二十)多表查询 WhereCascade <https://www.cnblogs.com/FreeSql/p/11531372.html>

*
(二十一)查询返回数据 <https://www.cnblogs.com/FreeSql/p/11531376.html>

*
(二十二)Dto 映射查询 <https://www.cnblogs.com/FreeSql/p/11531381.html>

*
(二十三)分组、聚合 <https://www.cnblogs.com/FreeSql/p/11531384.html>

*
(二十四)Linq To Sql 语法使用介绍 <https://www.cnblogs.com/FreeSql/p/11531392.html>

*
(二十五)延时加载 <https://www.cnblogs.com/FreeSql/p/11531395.html>

*
(二十六)贪婪加载 Include、IncludeMany、Dto、ToList
<https://www.cnblogs.com/FreeSql/p/11531404.html>

*
(二十七)将已写好的 SQL 语句,与实体类映射进行二次查询
<https://www.cnblogs.com/FreeSql/p/11531416.html>

*
(二十八)事务 <https://www.cnblogs.com/FreeSql/p/11531423.html>

*
(二十九)Lambda 表达式 <https://www.cnblogs.com/FreeSql/p/11531425.html>

*
(三十)读写分离 <https://www.cnblogs.com/FreeSql/p/11531430.html>

*
(三十一)分区分表 <https://www.cnblogs.com/FreeSql/p/11531435.html>

*
(三十二)Aop <https://www.cnblogs.com/FreeSql/p/11531471.html>

*
(三十三)CodeFirst 类型映射 <https://www.cnblogs.com/FreeSql/p/11531543.html>

*
(三十四)CodeFirst 迁移说明 <https://www.cnblogs.com/FreeSql/p/11531550.html>

*
(三十五)CodeFirst 自定义特性 <https://www.cnblogs.com/FreeSql/p/11531576.html>