此页面说明使用 SQL Server 提供程序时,哪些 .NET 成员转换成哪些 SQL 函数。
聚合函数
| .NET | SQL | 在 |
|---|---|---|
| EF.Functions.StandardDeviationSample(group.Select(x => x.Property)) | STDEV(Property) | |
| 英 孚。Functions.StandardDeviationPopulation(group.Select(x => x.Property)) | STDEVP(Property) | |
| EF.Functions.VarianceSample(group.Select(x => x.Property)) | VAR(Property) | |
| 英 孚。Functions.VariancePopulation(group.Select(x => x.Property)) | VARP(Property) | |
| 群。Average(x => x.Property) | AVG(Property) | |
| group.Count() | COUNT(*) | |
| group.LongCount() | COUNT_BIG(*) | |
| 群。Max(x => x.Property) | MAX(Property) | |
| 群。Min(x => x.Property) | MIN(Property) | |
| 群。Sum(x => x.Property) | SUM(Property) | |
| 字符串。Concat(group.Select(x => x.Property)) | STRING_AGG(属性,N'') | |
| 字符串。Join(分隔符、组)。Select(x => x.Property)) | STRING_AGG(属性, @separator) |
二进制函数
| .NET | SQL | 在 |
|---|---|---|
| bytes.Contains(value) | CHARINDEX(@value, 0 @bytes)>) | |
| bytes.ElementAt(i) | SUBSTRING(@bytes,@i + 1,1) | |
| bytes.First() | SUBSTRING(@bytes、1、1) | |
| bytes.Length | DATALENGTH(@bytes) | |
| bytes.SequenceEqual(second) | @bytes = @second | |
| bytes[i] | SUBSTRING(@bytes,@i + 1,1) | |
| EF.Functions.DataLength(arg) | DATALENGTH(@arg) |
转换函数
| .NET | SQL | 在 |
|---|---|---|
| bytes.ToString() | CONVERT(varchar(100), @bytes) | |
| byteValue.ToString() | CONVERT(varchar(3), @byteValue) | |
| charValue.ToString() | CONVERT(varchar(1), @charValue) | |
| Convert.ToBoolean(value) | CONVERT(bit, @value) | |
| Convert.ToByte(value) | CONVERT(tinyint, @value) | |
| Convert.ToDecimal(value) | CONVERT(decimal(18, 2), @value) | |
| Convert.ToDouble(value) | CONVERT(float, @value) | |
| Convert.ToInt16(value) | CONVERT(smallint, @value) | |
| Convert.ToInt32(value) | CONVERT(int,@value)) | |
| Convert.ToInt64(value) | CONVERT(bigint、 @value) | |
| Convert.ToString(value) | CONVERT(nvarchar(max), @value) | |
| dateOnly.ToString() | CONVERT(varchar(100), @dateOnly) | |
| dateTime.ToString() | CONVERT(varchar(100), @dateTime) | |
| dateTimeOffset.ToString() | CONVERT(varchar(100), @dateTimeOffset) | |
| decimalValue.ToString() | CONVERT(varchar(100), @decimalValue) | |
| doubleValue.ToString() | CONVERT(varchar(100), @doubleValue) | |
| floatValue.ToString() | CONVERT(varchar(100), @floatValue) | |
| guid.ToString() | CONVERT(varchar(36), @guid) | |
| intValue.ToString() | CONVERT(varchar(11), @intValue) | |
| longValue.ToString() | CONVERT(varchar(20), @longValue) | |
| sbyteValue.ToString() | CONVERT(varchar(4), @sbyteValue) | |
| shortValue.ToString() | CONVERT(varchar(6), @shortValue) | |
| timeOnly.ToString() | CONVERT(varchar(100), @timeOnly) | |
| timeSpan.ToString() | CONVERT(varchar(100), @timeSpan) | |
| uintValue.ToString() | CONVERT(varchar(10), @uintValue) | |
| ulongValue.ToString() | CONVERT(varchar(19), @ulongValue) | |
| ushortValue.ToString() | CONVERT(varchar(5), @ushortValue) |
日期和时间函数
| .NET | SQL | 在 |
|---|---|---|
| DateTime.Now | GETDATE() | |
| DateTime.Today | CONVERT(date, GETDATE()) | |
| DateTime.UtcNow | GETUTCDATE() | |
| dateTime.AddDays(value) | DATEADD(day、 @value、 @dateTime) | |
| dateTime.AddHours(value) | DATEADD(hour、 @value、 @dateTime) | |
| dateTime.AddMilliseconds(value) | DATEADD(毫秒,@value,@dateTime)) | |
| dateTime.AddMinutes(value) | DATEADD(minute、 、 @value@dateTime) | |
| dateTime.AddMonths(months) | DATEADD(月, @months, @dateTime)) | |
| dateTime.AddSeconds(value) | DATEADD(秒, @value, @dateTime)) | |
| dateTime.AddYears(value) | DATEADD(year、 @value@dateTime) | |
| dateTime.Date | CONVERT(date、 @dateTime) | |
| dateTime.Day | DATEPART(day、 @dateTime) | |
| dateTime.DayOfYear | DATEPART(dayofyear, @dateTime) | |
| dateTime.Hour | DATEPART(小时, @dateTime) | |
| dateTime.Microsecond | DATEPART(微秒, @dateTime) % 1000) | EF Core 10.0 |
| dateTime.Millisecond | DATEPART(毫秒, @dateTime) | |
| dateTime.Minute | DATEPART(分钟, @dateTime) | |
| dateTime.Month | DATEPART(月、 @dateTime) | |
| dateTime.Nanosecond | DATEPART(nanosecond,@dateTime) % 1000) | EF Core 10.0 |
| dateTime.Second | DATEPART(second, @dateTime) | |
| dateTime.TimeOfDay | CONVERT(time,@dateTime)) | |
| dateTime.Year | DATEPART(year、 @dateTime) | |
| DateTimeOffset.Now | SYSDATETIMEOFFSET() | |
| DateTimeOffset.UtcNow | SYSUTCDATETIME() | |
| dateTimeOffset.AddDays(days) | DATEADD(day、 @days、 @dateTimeOffset) | |
| dateTimeOffset.AddHours(hours) | DATEADD(hour、 @hours、 @dateTimeOffset) | |
| dateTimeOffset.AddMilliseconds(milliseconds) | DATEADD(毫秒,@milliseconds,@dateTimeOffset)) | |
| dateTimeOffset.AddMinutes(minutes) | DATEADD(minute、 、 @minutes@dateTimeOffset) | |
| dateTimeOffset.AddMonths(months) | DATEADD(月, @months, @dateTimeOffset)) | |
| dateTimeOffset.AddSeconds(seconds) | DATEADD(秒, @seconds, @dateTimeOffset)) | |
| dateTimeOffset.AddYears(years) | DATEADD(year、 @years@dateTimeOffset) | |
| dateTimeOffset.Date | CONVERT(date、 @dateTimeOffset) | |
| dateTimeOffset.Day | DATEPART(day、 @dateTimeOffset) | |
| dateTimeOffset.DayOfYear | DATEPART(dayofyear, @dateTimeOffset) | |
| dateTimeOffset.Hour | DATEPART(小时, @dateTimeOffset) | |
| dateTimeOffset.Microsecond | DATEPART(微秒, @dateTimeOffset) % 1000) | EF Core 10.0 |
| dateTimeOffset.Millisecond | DATEPART(毫秒, @dateTimeOffset) | |
| dateTimeOffset.Minute | DATEPART(分钟, @dateTimeOffset) | |
| dateTimeOffset.Month | DATEPART(月、 @dateTimeOffset) | |
| dateTimeOffset.Nanosecond | DATEPART(nanosecond,@dateTimeOffset) % 1000) | EF Core 10.0 |
| dateTimeOffset.Second | DATEPART(second, @dateTimeOffset) | |
| dateTimeOffset.TimeOfDay | CONVERT(time,@dateTimeOffset)) | |
| dateTimeOffset.ToUnixTimeSeconds() | DATEDIFF_BIG(second, '1970-01-01T00:00:00.0000000+00:00', @dateTimeOffset) | |
| dateTimeOffset.ToUnixTimeMilliseconds() | DATEDIFF_BIG(毫秒,“1970-01-01T00:00:00.0000000+00:00”) @dateTimeOffset) | |
| dateTimeOffset.Year | DATEPART(year、 @dateTimeOffset) | |
| DateOnly.FromDateTime(dateTime) | CONVERT(date、 @dateTime) | |
| dateOnly.AddDays(value) | DATEADD(day、 @value、 @dateOnly) | |
| dateOnly.AddMonths(months) | DATEADD(月, @months, @dateOnly)) | |
| dateOnly.AddYears(value) | DATEADD(year、 @value@dateOnly) | |
| dateOnly.Day | DATEPART(day、 @dateOnly) | |
| dateOnly.DayOfYear | DATEPART(dayofyear, @dateOnly) | |
| dateOnly.Month | DATEPART(月、 @dateOnly) | |
| dateOnly.Year | DATEPART(year、 @dateOnly) | |
| dateOnly.DayNumber | DATEDIFF(day, '0001-01-01', @dateOnly) | EF Core 10.0 |
| 英 孚。Functions.AtTimeZone(dateTime,timeZone) | @dateTime 在时区 @timeZone | |
| 英 孚。Functions.DateDiffDay(start、end) | DATEDIFF(day, @start, @end)) | |
| EF.Functions.DateDiffHour(start, end) | DATEDIFF(hour, @start, @end)) | |
| EF.Functions.DateDiffMicrosecond(start, end) | DATEDIFF(microsecond, @start, @end)) | |
| 英 孚。Functions.DateDiffMillisecond(start、end) | DATEDIFF(毫秒,@start,@end)) | |
| EF.Functions.DateDiffMinute(start,end) | DATEDIFF(分钟,@start,@d2)) | |
| EF.Functions.DateDiffMonth(start,end) | DATEDIFF(month, @start, @end)) | |
| EF.Functions.DateDiffNanosecond(start,end) | DATEDIFF(nanosecond, @start, @end)) | |
| 英 孚。Functions.DateDiffSecond(start、end) | DATEDIFF(second,@start,@end)) | |
| EF.Functions.DateDiffWeek(start,end) | DATEDIFF(week、 @start@end) | |
| 英 孚。Functions.DateDiffYear(start、end) | DATEDIFF(year, @start, @end)) | |
| 英 孚。Functions.DateFromParts(year、month、day) | DATEFROMPARTS(@year, @month, @day) | |
| 英 孚。Functions.DateTime2FromParts(year、month、day、...) | DATETIME2FROMPARTS(@year、 @month、 @day...) | |
| 英 孚。Functions.DateTimeFromParts(year、month、day、...) | DATETIMEFROMPARTS(@year、 @month、 @day...) | |
| EF.Functions.DateTimeOffsetFromParts(year、month、day、...) | DATETIMEOFFSETFROMPARTS(@year、、@month@day...) | |
| EF.Functions.IsDate(expression) | ISDATE(@expression) | |
| 英 孚。Functions.SmallDateTimeFromParts(year、month、day、...) | SMALLDATETIMEFROMPARTS(@year、、@month@day...) | |
| EF.Functions.TimeFromParts(小时、分钟、秒、...) | TIMEFROMPARTS(@hour、、@minute@second...) | |
| timeOnly.AddHours(value) | DATEADD(hour、 @value、 @timeOnly) | |
| timeOnly.AddMinutes(value) | DATEADD(minute、 、 @value@timeOnly) | |
| timeOnly.Hour | DATEPART(小时, @timeOnly) | |
| timeOnly.IsBetween(start,end) | @timeOnly >= @start AND @timeOnly<@end | |
| timeOnly.Microsecond | DATEPART(微秒, @timeOnly) % 1000) | EF Core 10.0 |
| timeOnly.Millisecond | DATEPART(毫秒, @timeOnly) | |
| timeOnly.Minute | DATEPART(分钟, @timeOnly) | |
| timeOnly.Nanosecond | DATEPART(nanosecond,@timeOnly) % 1000) | EF Core 10.0 |
| timeOnly.Second | DATEPART(second, @timeOnly) | |
| timeSpan.Hours | DATEPART(小时, @timeSpan) | |
| timeSpan.Microsecond | DATEPART(微秒, @timeSpan) % 1000) | EF Core 10.0 |
| timeSpan.Milliseconds | DATEPART(毫秒, @timeSpan) | |
| timeSpan.Minutes | DATEPART(分钟, @timeSpan) | |
| timeSpan.Nanosecond | DATEPART(nanosecond,@timeSpan) % 1000) | EF Core 10.0 |
| timeSpan.Seconds | DATEPART(second, @timeSpan) |
数值函数
| .NET | SQL | 在 |
|---|---|---|
| double.DegreesToRadians(x) | RADIANS(@x) | |
| double.RadiansToDegrees(x) | DEGREES(@x) | |
| EF.Functions.Random() | RAND() | |
| Math.Abs(value) | ABS(@value) | |
| Math.Acos(d) | ACOS(@d) | |
| Math.Asin(d) | ASIN(@d) | |
| Math.Atan(d) | ATAN(@d) | |
| Math.Atan2(y,x) | ATN2(@y, @x) | |
| Math.Ceiling(d) | CEILING(@d) | |
| Math.Cos(d) | COS(@d) | |
| Math.Exp(d) | EXP(@d) | |
| Math.Floor(d) | FLOOR(@d) | |
| Math.Log(d) | LOG(@d) | |
| Math.Log(a, newBase) | LOG(@a, @newBase) | |
| Math.Log10(d) | LOG10(@d) | |
| Math.Max(x, y) | GREATEST(@x, @y) | EF Core 9.0 |
| Math.Min(x, y) | LEAST(@x, @y) | EF Core 9.0 |
| Math.Pow(x, y) | POWER(@x, @y) | |
| Math.Round(d) | ROUND(@d,0) | |
| Math.Round(d, 小数位) | ROUND(@d,@decimals)) | |
| Math.Sign(value) | SIGN(@value) | |
| Math.Sin(a) | SIN(@a) | |
| Math.Sqrt(d) | SQRT(@d) | |
| Math.Tan(a) | TAN(@a) | |
| Math.Truncate(d) | ROUND(@d、0、1) |
提示
除了此处列出的方法外,还将转换相应的泛型数学实现和 MathF 方法。 例如,Math.Sin、MathF.Sin、double.Sin、float.Sin 全部映射到 SQL 中的 SIN 函数。
字符串函数
| .NET | SQL | 在 |
|---|---|---|
| EF.Functions.Collate(操作数, 排序规则) | @operand 整理 @collation | |
| 英 孚。Functions.Contains(propertyReference, searchCondition) | CONTAINS(@propertyReference, @searchCondition) | |
| 英 孚。Functions.Contains(propertyReference、searchCondition、languageTerm) | CONTAINS(@propertyReference、 @searchCondition语言 @languageTerm) | |
| 英 孚。Functions.FreeText(propertyReference,freeText) | FREETEXT(@propertyReference, @freeText) | |
| 英 孚。Functions.FreeText(propertyReference,freeText,languageTerm) | FREETEXT(@propertyReference、 @freeText语言 @languageTerm) | |
| EF.Functions.IsNumeric(expression) | ISNUMERIC(@expression) | |
| EF.Functions.Like(matchExpression,pattern) | @matchExpression 喜欢 @pattern | |
| 英 孚。Functions.Like(matchExpression, pattern, escapeCharacter) | @matchExpression LIKE @pattern ESCAPE @escapeCharacter | |
| 字符串Compare(strA,strB) | CASE WHEN @strA = @strB THEN 0 ...End | |
| 字符串。Concat(str0,str1) | @str0 + @str1 | |
| string.IsNullOrEmpty(value) | @value 为 NULL 或 @value 类似于 N'' | |
| string.IsNullOrWhiteSpace(value) | @value 为 NULL 或 @value = N'' | |
| string.Join(", ", new [] { x, y, z }) | CONCAT_WS(N', ', , @x, @y@z) | EF Core 9.0 |
| stringValue.CompareTo(strB) | CASE WHEN @stringValue = @strB THEN 0 ...End | |
| stringValue.Contains(value) | @stringValue LIKE N'%' + + @value N'%' | |
| stringValue.EndsWith(value) | @stringValue LIKE N'%' + @value | |
| stringValue.FirstOrDefault() | SUBSTRING(@stringValue、1、1) | |
| stringValue.IndexOf(value) | CHARINDEX(@value, @stringValue) - 1 | |
| stringValue.IndexOf(value, startIndex) | CHARINDEX(@value, @stringValue, @startIndex) - 1) | |
| stringValue.LastOrDefault() | SUBSTRING(@stringValue,LEN(@stringValue),1) | |
| stringValue.Length | LEN(@stringValue) | |
| stringValue.Replace(@oldValue, @newValue) | REPLACE(@stringValue, @oldValue, @newValue)) | |
| stringValue.StartsWith(value) | @stringValue LIKE @value + N'%' | |
| stringValue.Substring(startIndex) | SUBSTRING(@stringValue, @startIndex + 1, LEN(@stringValue)) | |
| stringValue.Substring(startIndex,length) | SUBSTRING(@stringValue, @startIndex + 1, @length)) | |
| stringValue.ToLower() | LOWER(@stringValue) | |
| stringValue.ToUpper() | UPPER(@stringValue) | |
| stringValue.Trim() | LTRIM(RTRIM(@stringValue)) | |
| stringValue.TrimEnd() | RTRIM(@stringValue) | |
| stringValue.TrimStart() | LTRIM(@stringValue) |
其他函数
| .NET | SQL | 在 |
|---|---|---|
| enumValue.HasFlag(flag) | @enumValue & @flag = @flag | |
| Guid.NewGuid() | NEWID() | |
| nullable.GetValueOrDefault() | COALESCE(@nullable,0) | |
| nullable.GetValueOrDefault(defaultValue) | COALESCE(@nullable, @defaultValue) |
注意
为了说明目的,简化了一些 SQL 翻译。 实际的 SQL 更复杂,可以处理更广泛的值。