From 843ab19239d44260e6e487b43c459c2feb7c28b2 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Sun, 8 Dec 2019 00:07:21 +0800 Subject: [PATCH] update --- 更新日志.md | 2 ++ 表达式函数.md | 21 ++++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/更新日志.md b/更新日志.md index 22fedf8..ac52635 100644 --- a/更新日志.md +++ b/更新日志.md @@ -3,6 +3,8 @@ ## v0.12.10(预告) +- 增加 RawValueAttribute 实现自定义表达式时,使用原始值传入参数; +- 增加 IEnumerable<(T1, T2)>.ContainsMany 扩展方法,实现自定义表达式解析多列无法 IN 的问题; - 修复 多表查询 WhereCascade,如果 Join 没有 On 条件,可能导致生成的 SQL 多了一个 AND 出错; ## v0.12.9 diff --git a/表达式函数.md b/表达式函数.md index 3ea6ee4..2a0eaed 100644 --- a/表达式函数.md +++ b/表达式函数.md @@ -4,7 +4,7 @@ FreeSql 支持功能丰富的表达式函数解析,方便程序员在不了解 ```csharp var t1 = fsql.Select().Where(a => new[] { 1, 2, 3 }.Contains(a.Id)).ToSql(); -//SELECT ... FROM .. +//SELECT .. FROM .. //WHERE (a.`Id` in (1,2,3)) ``` @@ -14,13 +14,28 @@ var t1 = fsql.Select().Where(a => new[] { 1, 2, 3 }.Contains(a.Id)).ToSql(); 现在:where id in (1..500) or id in (501..1000) or id in (1001..1333) +In 只能实现单列查询,多列怎么办? + +```csharp +List<(Guid, DateTime)> tupleList = new List<(Guid, DateTime)>(); + +tupleList.Add((Guid.NewGuid(), DateTime.Now)); +tupleList.Add((Guid.NewGuid(), DateTime.Now)); +tupleList.Add((Guid.NewGuid(), DateTime.Now)); +var t2 = fsql.Select().Where(a => contains2linqarr.ContainsMany(a.Id, a.ct1)).ToSql(); +//SELECT .. FROM .. +//WHERE (a."Id" = '685ee1f6-bdf6-4719-a291-c709b8a1378f' AND a."ct1" = '2019-12-07 23:55:27' OR +//a."Id" = '5ecd838a-06a0-4c81-be43-1e77633b7404' AND a."ct1" = '2019-12-07 23:55:27' OR +//a."Id" = 'b8b366f3-1c03-4547-9c96-d362dd5cae6a' AND a."ct1" = '2019-12-07 23:55:27') +``` + ## 查找今天创建的数据 ```csharp -var t2 = fsql.Select().Where(a => a.CreateTime.Date == DateTime.Now.Date).ToSql(); +var t3 = fsql.Select().Where(a => a.CreateTime.Date == DateTime.Today).ToSql(); //这行代码说明 FreeSql 表达式解析强大,不是所有 ORM 都支持 -var t3 = fsql.Select().Where(a => a.CreateTime.Between(DateTime.Today, DateTime.Today.AddDays(1))).ToSql(); +var t4 = fsql.Select().Where(a => a.CreateTime.Between(DateTime.Today, DateTime.Today.AddDays(1))).ToSql(); ``` > SqlServer nvarchar/varchar 已兼容表达式解析,分别解析为:N'' 和 '',优化索引执行计划;