CLR Method to Canonical Function Mapping

The Entity Framework provides a set of canonical functions that implement functionality that is common across many database systems, such as string manipulation and mathematical functions. This enables developers to target a broad range of database systems. When called from a querying technology, such as LINQ to Entities, these canonical functions are translated to the correct corresponding store function for the provider being used. This allows function invocations to be expressed in a common form across data sources, providing a consistent query experience across data sources. The bitwise AND, OR, NOT, and XOR operators are also mapped to canonical functions when the operand is a numeric type. For Boolean operands, the bitwise AND, OR, NOT, and XOR operators compute the logical AND, OR, NOT, and XOR operations of their operands. For more information, see Canonical Functions.

For LINQ scenarios, queries against the Entity Framework involve mapping certain CLR methods to methods on the underlying data source through canonical functions. Any method calls in a LINQ to Entities query that are not explicitly mapped to a canonical function will result in a runtime NotSupportedException exception being thrown.

System.String Method (Static) Mapping

System.String method (static) Canonical function
System.String Concat(String str0, String str1) Concat(str0, str1)
System.String Concat(String str0, String str1, String str2) Concat(Concat(str0, str1), str2)
System.String Concat(String str0, String str1, String str2, String str03) Concat(Concat(Concat(str0, str1), str2), str3)
Boolean Equals(String a, String b) = operator
Boolean IsNullOrEmpty(String value) (IsNull(value)) OR Length(value) = 0
Boolean op_Equality(String a, String b) = operator
Boolean op_Inequality(String a , String b) != operator
Microsoft.VisualBasic.Strings.Trim(String str) Trim(str)
Microsoft.VisualBasic.Strings.LTrim(String str) Ltrim(str)
Microsoft.VisualBasic.Strings.RTrim(String str) Rtrim(str)
Microsoft.VisualBasic.Strings.Len(String expression) Length(expression)
Microsoft.VisualBasic.Strings.Left(String str, Int32 Length) Left(str, Length)
Microsoft.VisualBasic.Strings.Mid(String str, Int32 Start, Int32 Length) Substring(str, Start, Length)
Microsoft.VisualBasic.Strings.Right(String str, Int32 Length) Right(str, Length)
Microsoft.VisualBasic.Strings.UCase(String Value) ToUpper(Value)
Microsoft.VisualBasic.Strings.LCase(String Value) ToLower(Value)

System.String Method (Instance) Mapping

System.String method (instance) Canonical function Notes
Boolean Contains(String value) this LIKE '%value%' If value is not a constant, then this maps to IndexOf(this, value) > 0
Boolean EndsWith(String value) this LIKE '%value' If value is not a constant, then this maps to Right(this, length(value)) = value.
Boolean StartsWith(String value) this LIKE 'value%' If value is not a constant, then this maps to IndexOf(this, value) = 1.
Length Length(this)
Int32 IndexOf(String value) IndexOf(this, value) - 1
System.String Insert(Int32 startIndex, String value) Concat(Concat(Substring(this, 1, startIndex), value), Substring(this, startIndex+1, Length(this) - startIndex))
System.String Remove(Int32 startIndex) Substring(this, 1, startIndex)
System.String Remove(Int32 startIndex, Int32 count) Concat(Substring(this, 1, startIndex) , Substring(this, startIndex + count +1, Length(this) - (startIndex + count))) Remove(startIndex, count) is only supported if count is an integer greater than or equal to 0.
System.String Replace(String oldValue, String newValue) Replace(this, oldValue, newValue)
System.String Substring(Int32 startIndex) Substring(this, startIndex +1, Length(this) - startIndex)
System.String Substring(Int32 startIndex, Int32 length) Substring(this, startIndex +1, length)
System.String ToLower() ToLower(this)
System.String ToUpper() ToUpper(this)
System.String Trim() Trim(this)
System.String TrimEnd(Char[] trimChars) RTrim(this)
System.String TrimStart(Char[]trimChars) LTrim(this)
Boolean Equals(String value) = operator

System.DateTime Method (Static) Mapping

System.DateTime method (static) Canonical function Notes
Boolean Equals(DateTime t1, DateTime t2) = operator
System.DateTime.Now CurrentDateTime()
System.DateTime.UtcNow CurrentUtcDateTime()
Boolean op_Equality(DateTime d1, DateTime d2) = operator
Boolean op_GreaterThan(DateTime t1, DateTime t2) > operator
Boolean op_GreaterThanOrEqual(DateTime t1, DateTime t2) >= operator
Boolean op_Inequality(DateTime t1, DateTime t2) != operator
Boolean op_LessThan(DateTime t1, DateTime t2) < operator
Boolean op_LessThanOrEqual(DateTime t1, DateTime t2) <= operator
Microsoft.VisualBasic.DateAndTime.DatePart( _

ByVal Interval As DateInterval, _

ByVal DateValue As DateTime, _

Optional ByVal FirstDayOfWeekValue As FirstDayOfWeek = VbSunday, _

Optional ByVal FirstWeekOfYearValue As FirstWeekOfYear = VbFirstJan1 _

) As Integer
See the DatePart Function section for more information.
Microsoft.VisualBasic.DateAndTime.Now CurrentDateTime()
Microsoft.VisualBasic.DateAndTime.Year(DateTime TimeValue) Year()
Microsoft.VisualBasic.DateAndTime.Month(DateTime TimeValue) Month()
Microsoft.VisualBasic.DateAndTime.Day(DateTime TimeValue) Day()
Microsoft.VisualBasic.DateAndTime.Hour(DateTime TimeValue) Hour()
Microsoft.VisualBasic.DateAndTime.Minute(DateTime TimeValue) Minute()
Microsoft.VisualBasic.DateAndTime.Second(DateTime TimeValue) Second()

System.DateTime Method (Instance) Mapping

System.DateTime method (instance) Canonical function
Boolean Equals(DateTime value) = operator
Day Day(this)
Hour Hour(this)
Millisecond Millisecond(this)
Minute Minute(this)
Month Month(this)
Second Second(this)
Year Year(this)

System.DateTimeOffset Method (Instance) Mapping

The mapping shown for the get methods on the listed properties.

System.DateTimeOffset method (instance) Canonical function Notes
Day Day(this) Not supported against SQL Server 2005.
Hour Hour(this) Not supported against SQL Server 2005.
Millisecond Millisecond(this) Not supported against SQL Server 2005.
Minute Minute(this) Not supported against SQL Server 2005.
Month Month(this) Not supported against SQL Server 2005.
Second Second(this) Not supported against SQL Server 2005.
Year Year(this) Not supported against SQL Server 2005.

Note

The Equals method returns true if the compared DateTimeOffset objects are equal; false otherwise. The CompareTo method returns 0, 1, or -1 depending on whether the compared DateTimeOffset object is equal, greater than, or less than, respectively.

System.DateTimeOffset Method (Static) Mapping

The mapping shown for the get methods on the listed properties.

System.DateTimeOffset method (static) Canonical function Notes
System.DateTimeOffset.Now() CurrentDateTimeOffset() Not supported against SQL Server 2005.

System.TimeSpan Method (Instance) Mapping

The mapping shown for the get methods on the listed properties.

System.TimeSpan method (instance) Canonical function Notes
Hours Hour(this) Not supported against SQL Server 2005.
Milliseconds Millisecond(this) Not supported against SQL Server 2005.
Minutes Minute(this) Not supported against SQL Server 2005.
Seconds Second(this) Not supported against SQL Server 2005.

Note

The Equals method returns true if the compared TimeSpan objects are equal; false otherwise. The CompareTo method returns 0, 1, or -1 depending on whether the compared TimeSpan object is equal, greater than, or less than, respectively.

DatePart Function

The DatePart Function is mapped to one of several different canonical functions, depending on the value of Interval. The following table displays the canonical function mapping for the supported values of Interval:

Interval value Canonical function
DateInterval.Year Year()
DateInterval.Month Month()
DateInterval.Day Day()
DateInterval.Hour Hour()
DateInterval.Minute Minute()
DateInterval.Second Second()

Mathematical Function Mapping

CLR method Canonical function
System.Decimal.Ceiling(Decimal d) Ceiling(d)
System.Decimal.Floor(Decimal d) Floor(d)
System.Decimal.Round(Decimal d) Round(d)
System.Math.Ceiling(Decimal d) Ceiling(d)
System.Math.Floor(Decimal d) Floor(d)
System.Math.Round(Decimal d) Round(d)
System.Math.Ceiling(Double a) Ceiling(a)
System.Math.Floor(Double a) Floor(a)
System.Math.Round(Double a) Round(a)
System.Math.Round(Double value, Int16 digits) Round(value, digits)
System.Math.Round(Double value, Int32 digits) Round(value, digits)
System.Math.Round(Decimal value, Int16 digits) Round(value, digits)
System.Math.Round(Decimal value, Int32, digits) Round(value, digits)
System.Math.Abs(Int16 value) Abs(value)
System.Math.Abs(Int32 value) Abs(value)
System.Math.Abs(Int64 value) Abs(value)
System.Math.Abs(Byte value) Abs(value)
System.Math.Abs(Single value) Abs(value)
System.Math.Abs(Double value) Abs(value)
System.Math.Abs(Decimal value) Abs(value)
System.Math.Truncate(Double value, Int16 digits) Truncate(value, digits)
System.Math.Truncate(Double value, Int32 digits) Truncate(value, digits)
System.Math.Truncate(Decimal value, Int16 digits) Truncate(value, digits)
System.Math.Truncate(Decimal value, Int32 digits) Truncate(value, digits)
System.Math.Power(Int32 value, Int64 exponent) Power(value, exponent)
System.Math.Power(Int32 value, Double exponent) Power(value, exponent)
System.Math.Power(Int32 value, Decimal exponent) Power(value, exponent)
System.Math.Power(Int64 value, Int64 exponent) Power(value, exponent)
System.Math.Power(Int64 value, Double exponent) Power(value, exponent)
System.Math.Power(Int64 value, Decimal exponent) Power(value, exponent)
System.Math.Power(Double value, Int64 exponent) Power(value, exponent)
System.Math.Power(Double value, Double exponent) Power(value, exponent)
System.Math.Power(Double value, Decimal exponent) Power(value, exponent)
System.Math.Power(Decimal value, Int64 exponent) Power(value, exponent)
System.Math.Power(Decimal value, Double exponent) Power(value, exponent)
System.Math.Power(Decimal value, Decimal exponent) Power(value, exponent)

Bitwise Operator Mapping

Bitwise operator Canonical function for non-Boolean operands Canonical function for Boolean operands
Bitwise AND operator BitWiseAnd op1 AND op2
Bitwise OR operator BitWiseOr op1 OR op2
Bitwise NOT operator BitWiseNot NOT(op)
Bitwise XOR operator BitWiseXor ((op1 AND NOT(op2)) OR (NOT(op1) AND op2))

Other Mapping

Method Canonical function
Guid.NewGuid() NewGuid()

See also