update

28810
2019-12-08 00:07:21 +08:00
parent 596eedb684
commit 843ab19239
2 changed files with 20 additions and 3 deletions

@@ -3,6 +3,8 @@
## v0.12.10(预告)
- 增加 RawValueAttribute 实现自定义表达式时,使用原始值传入参数;
- 增加 IEnumerable<(T1, T2)>.ContainsMany 扩展方法,实现自定义表达式解析多列无法 IN 的问题;
- 修复 多表查询 WhereCascade如果 Join 没有 On 条件,可能导致生成的 SQL 多了一个 AND 出错;
## v0.12.9

@@ -4,7 +4,7 @@ FreeSql 支持功能丰富的表达式函数解析,方便程序员在不了解
```csharp
var t1 = fsql.Select<T>().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<T>().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<T>().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<T>().Where(a => a.CreateTime.Date == DateTime.Now.Date).ToSql();
var t3 = fsql.Select<T>().Where(a => a.CreateTime.Date == DateTime.Today).ToSql();
//这行代码说明 FreeSql 表达式解析强大,不是所有 ORM 都支持
var t3 = fsql.Select<T>().Where(a => a.CreateTime.Between(DateTime.Today, DateTime.Today.AddDays(1))).ToSql();
var t4 = fsql.Select<T>().Where(a => a.CreateTime.Between(DateTime.Today, DateTime.Today.AddDays(1))).ToSql();
```
> SqlServer nvarchar/varchar 已兼容表达式解析分别解析为N'' 和 '',优化索引执行计划;