Skip to content

Latest commit

 

History

History
86 lines (58 loc) · 2.01 KB

File metadata and controls

86 lines (58 loc) · 2.01 KB

Issues

LinqSharp.EFCore

Function Provider Supports

.NET Function Jet MySql Oracle PostgreSQL Sqlite SqlServer
DbFunc.Random ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
DbFunc.Concat ✔️ ✔️ ✔️ ✔️
DbFunc.DateTime ✔️ ✔️

DateTime

For example, EntityFramework can not translate this expression:

.Where(x => new DateTime(x.Year, x.Month, x.Day) > DateTime.Now);

So, we provide another function to support this:

.Where(x => DbFunc.DateTime(x.Year, x.Month, x.Day) > DateTime.Now);

If use MySQL, the generated SQL is:

WHERE STR_TO_DATE(CONCAT(`x`.`Year`, '-', `x`.`Month`, '-', `x`.`Day`), '%Y-%m-%d') = CURRENT_TIMESTAMP();

In SQLServer

Use:

.Where(x => DbFunc.DateTime(x.Year, x.Month, x.Day) > DbFunc.DateTime(2012, 4, 16));
CONVERT(DATETIME, CONCAT([x].[Year], N'-', [x].[Month], N'-', [x].[Day])) > CONVERT(DATETIME, CONCAT(2012, N'-', 4, N'-', 16))

!! Not Use:

// Wrong
.Where(x => DbFunc.DateTime(x.Year, x.Month, x.Day) > new DateTime(2012, 4, 16));
/* Wrong */
WHERE CONVERT(DATETIME, CONCAT([x].[Year], N'-', [x].[Month], N'-', [x].[Day])) > TIMESTAMP '2012-04-16T00:00:00.0000000'

In MySql

Everything is OK.

.Where(x => DbFunc.DateTime(x.Year, x.Month, x.Day) > DbFunc.DateTime(2012, 4, 16));
WHERE STR_TO_DATE(CONCAT(`x`.`Year`, '-', `x`.`Month`, '-', `x`.`Day`), '%Y-%m-%d')
> STR_TO_DATE(CONCAT(2012, '-', 4, '-', 16), '%Y-%m-%d');

Or

.Where(x => DbFunc.DateTime(x.Year, x.Month, x.Day) > new DateTime(2012, 4, 16));
WHERE STR_TO_DATE(CONCAT(`x`.`Year`, '-', `x`.`Month`, '-', `x`.`Day`), '%Y-%m-%d')
> '2012-04-16 00:00:00.000000';