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
https://www.donet5.com/Home/Doc
MIT License
5.31k stars 1.33k forks source link

Where的Lambda條件強化 #1177

Closed Yumitoya8569 closed 1 year ago

Yumitoya8569 commented 1 year ago

環境

.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

DotNetNext commented 1 year ago

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