DotNetNext / SqlSugar

.Net aot ORM Fastest ORM Simple Easy VB.NET Sqlite orm Oracle ORM Mysql Orm 虚谷数据库 postgresql ORm SqlServer oRm 达梦 ORM 人大金仓 ORM 神通ORM C# ORM , C# ORM .NET ORM NET5 ORM .NET6 ORM ClickHouse orm QuestDb ,TDengine ORM,OceanBase orm,GaussDB orm ,Tidb orm Object/Relational Mapping

Home Page:https://www.donet5.com/Home/Doc

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Where的Lambda條件強化

Yumitoya8569 opened this issue · comments

環境

.Net 7
Oracle 11g
SqlSugarCore 5.1.4.88

驗證

定義

public class DateRange
{
      public DateTime From { get; set; }
      public DateTime To { get; set; }
}
public class MyObj
{
      public List<DateRange> dateRanges { get; set; }
}

public class TableA
{
      [SugarColumn(IsPrimaryKey = true)]
      public string id { get; set; } = string.Empty;

      public string name { get; set; } = string.Empty;

      public DateTime? create_utc { get; set; } = DateTime.UtcNow;
}

情境1

var list = new List<DateRange>();
list.Add(new DateRange { From = DateTime.Now.AddDays(-1), To = DateTime.Now.AddDays(0) });
list.Add(new DateRange { From = DateTime.Now.AddDays(-3), To = DateTime.Now.AddDays(-2) });

_sysDb.Queryable<TableA>().Where(a => list.Any(p => a.create_utc >= p.From && a.create_utc <= p.To)).ToList()

情境2

var list = new List<DateRange>();
list.Add(new DateRange { From = DateTime.Now.AddDays(-1), To = DateTime.Now.AddDays(0) });
list.Add(new DateRange { From = DateTime.Now.AddDays(-3), To = DateTime.Now.AddDays(-2) });

var obj = new MyObj { dateRanges = list };

_sysDb.Queryable<TableA>().Where(a => obj.dateRanges.Any(p => a.create_utc >= p.From && a.create_utc <= p.To)).ToList()

問題

延伸自#1154, 上述情境1跟情境2的操作目前皆會翻車, 且為不同類型錯誤

情境1: p.From 與 p.To 會直接被帶入語法中, 無法識別

情境2: p.From 與 p.To 被解讀為以下格式cast('2023-07-20 17:59:42.755' as TIMESTAMP), 出現錯誤 "ORA-01843: 不是有效的月份"

*create_utc在Oracle上的型別為Date

SqlSugarCore 5.1.4.92-preview16
已修复,还有问题发新issue