1 //---------------------------------------------------------------------
2 // <copyright file="EdmFunctions.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
7 // @backupOwner Microsoft
8 //---------------------------------------------------------------------
10 namespace System.Data.Common.CommandTrees.ExpressionBuilder
13 using System.Collections.Generic;
14 using System.Data.Entity;
15 using System.Data.Metadata.Edm;
16 using System.Diagnostics;
19 /// Provides an API to construct <see cref="DbExpression"/>s that invoke canonical EDM functions, and allows that API to be accessed as extension methods on the expression type itself.
21 [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Edm")]
22 public static class EdmFunctions
24 #region Private Implementation
26 private static EdmFunction ResolveCanonicalFunction(string functionName, TypeUsage[] argumentTypes)
28 Debug.Assert(!string.IsNullOrEmpty(functionName), "Function name must not be null");
30 List<EdmFunction> functions = new List<EdmFunction>(
31 System.Linq.Enumerable.Where(
32 EdmProviderManifest.Instance.GetStoreFunctions(),
33 func => string.Equals(func.Name, functionName, StringComparison.Ordinal))
36 EdmFunction foundFunction = null;
37 bool ambiguous = false;
38 if (functions.Count > 0)
40 foundFunction = EntitySql.FunctionOverloadResolver.ResolveFunctionOverloads(functions, argumentTypes, false, out ambiguous);
43 throw EntityUtil.Argument(Strings.Cqt_Function_CanonicalFunction_AmbiguousMatch(functionName));
47 if (foundFunction == null)
49 throw EntityUtil.Argument(Strings.Cqt_Function_CanonicalFunction_NotFound(functionName));
55 internal static DbFunctionExpression InvokeCanonicalFunction(string functionName, params DbExpression[] arguments)
57 TypeUsage[] argumentTypes = new TypeUsage[arguments.Length];
58 for (int idx = 0; idx < arguments.Length; idx++)
60 Debug.Assert(arguments[idx] != null, "Ensure arguments are non-null before calling InvokeCanonicalFunction");
61 argumentTypes[idx] = arguments[idx].ResultType;
64 EdmFunction foundFunction = ResolveCanonicalFunction(functionName, argumentTypes);
65 return DbExpressionBuilder.Invoke(foundFunction, arguments);
70 #region Aggregate functions - Average, Count, LongCount, Max, Min, Sum, StDev, StDevP, Var, VarP
73 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Avg' function over the
74 /// specified collection. The result type of the expression is the same as the element type of the collection.
76 /// <param name="collection">An expression that specifies the collection from which the average value should be computed</param>
77 /// <returns>A new DbFunctionExpression that produces the average value.</returns>
78 /// <exception cref="ArgumentNullException"><paramref name="collection"/> is null.</exception>
79 /// <exception cref="ArgumentException">No overload of the canonical 'Avg' function accepts an argument with the result type of <paramref name="collection"/>.</exception>
80 public static DbFunctionExpression Average(this DbExpression collection)
82 EntityUtil.CheckArgumentNull(collection, "collection");
83 return InvokeCanonicalFunction("Avg", collection);
87 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Count' function over the
88 /// specified collection. The result type of the expression is Edm.Int32.
90 /// <param name="collection">An expression that specifies the collection over which the count value should be computed.</param>
91 /// <returns>A new DbFunctionExpression that produces the count value.</returns>
92 /// <exception cref="ArgumentNullException"><paramref name="collection"/> is null.</exception>
93 /// <exception cref="ArgumentException">No overload of the canonical 'Count' function accepts an argument with the result type of <paramref name="collection"/>.</exception>
94 public static DbFunctionExpression Count(this DbExpression collection)
96 EntityUtil.CheckArgumentNull(collection, "collection");
97 return InvokeCanonicalFunction("Count", collection);
101 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'BigCount' function over the
102 /// specified collection. The result type of the expression is Edm.Int64.
104 /// <param name="collection">An expression that specifies the collection over which the count value should be computed.</param>
105 /// <returns>A new DbFunctionExpression that produces the count value.</returns>
106 /// <exception cref="ArgumentNullException"><paramref name="collection"/> is null.</exception>
107 /// <exception cref="ArgumentException">No overload of the canonical 'BigCount' function accepts an argument with the result type of <paramref name="collection"/>.</exception>
108 public static DbFunctionExpression LongCount(this DbExpression collection)
110 EntityUtil.CheckArgumentNull(collection, "collection");
111 return InvokeCanonicalFunction("BigCount", collection);
115 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Max' function over the
116 /// specified collection. The result type of the expression is the same as the element type of the collection.
118 /// <param name="collection">An expression that specifies the collection from which the maximum value should be retrieved</param>
119 /// <returns>A new DbFunctionExpression that produces the maximum value.</returns>
120 /// <exception cref="ArgumentNullException"><paramref name="collection"/> is null.</exception>
121 /// <exception cref="ArgumentException">No overload of the canonical 'Max' function accepts an argument with the result type of <paramref name="collection"/>.</exception>
122 public static DbFunctionExpression Max(this DbExpression collection)
124 EntityUtil.CheckArgumentNull(collection, "collection");
125 return InvokeCanonicalFunction("Max", collection);
129 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Min' function over the
130 /// specified collection. The result type of the expression is the same as the element type of the collection.
132 /// <param name="collection">An expression that specifies the collection from which the minimum value should be retrieved</param>
133 /// <returns>A new DbFunctionExpression that produces the minimum value.</returns>
134 /// <exception cref="ArgumentNullException"><paramref name="collection"/> is null.</exception>
135 /// <exception cref="ArgumentException">No overload of the canonical 'Min' function accepts an argument with the result type of <paramref name="collection"/>.</exception>
136 public static DbFunctionExpression Min(this DbExpression collection)
138 EntityUtil.CheckArgumentNull(collection, "collection");
139 return InvokeCanonicalFunction("Min", collection);
143 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Sum' function over the
144 /// specified collection. The result type of the expression is the same as the element type of the collection.
146 /// <param name="collection">An expression that specifies the collection from which the sum should be computed</param>
147 /// <returns>A new DbFunctionExpression that produces the sum.</returns>
148 /// <exception cref="ArgumentNullException"><paramref name="collection"/> is null.</exception>
149 /// <exception cref="ArgumentException">No overload of the canonical 'Sum' function accepts an argument with the result type of <paramref name="collection"/>.</exception>
150 public static DbFunctionExpression Sum(this DbExpression collection)
152 EntityUtil.CheckArgumentNull(collection, "collection");
153 return InvokeCanonicalFunction("Sum", collection);
157 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'StDev' function over the
158 /// non-null members of the specified collection. The result type of the expression is Edm.Double.
160 /// <param name="collection">An expression that specifies the collection for which the standard deviation should be computed</param>
161 /// <returns>A new DbFunctionExpression that produces the standard deviation value over non-null members of the collection.</returns>
162 /// <exception cref="ArgumentNullException"><paramref name="collection"/> is null.</exception>
163 /// <exception cref="ArgumentException">No overload of the canonical 'StDev' function accepts an argument with the result type of <paramref name="collection"/>.</exception>
164 [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "St")]
165 public static DbFunctionExpression StDev(this DbExpression collection)
167 EntityUtil.CheckArgumentNull(collection, "collection");
168 return InvokeCanonicalFunction("StDev", collection);
172 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'StDevP' function over the
173 /// population of the specified collection. The result type of the expression is Edm.Double.
175 /// <param name="collection">An expression that specifies the collection for which the standard deviation should be computed</param>
176 /// <returns>A new DbFunctionExpression that produces the standard deviation value.</returns>
177 /// <exception cref="ArgumentNullException"><paramref name="collection"/> is null.</exception>
178 /// <exception cref="ArgumentException">No overload of the canonical 'StDevP' function accepts an argument with the result type of <paramref name="collection"/>.</exception>
179 [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "St")]
180 public static DbFunctionExpression StDevP(this DbExpression collection)
182 EntityUtil.CheckArgumentNull(collection, "collection");
183 return InvokeCanonicalFunction("StDevP", collection);
187 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Var' function over the
188 /// non-null members of the specified collection. The result type of the expression is Edm.Double.
190 /// <param name="collection">An expression that specifies the collection for which the statistical variance should be computed</param>
191 /// <returns>A new DbFunctionExpression that produces the statistical variance value for the non-null members of the collection.</returns>
192 /// <exception cref="ArgumentNullException"><paramref name="collection"/> is null.</exception>
193 /// <exception cref="ArgumentException">No overload of the canonical 'Var' function accepts an argument with the result type of <paramref name="collection"/>.</exception>
194 public static DbFunctionExpression Var(this DbExpression collection)
196 EntityUtil.CheckArgumentNull(collection, "collection");
197 return InvokeCanonicalFunction("Var", collection);
201 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'VarP' function over the
202 /// population of the specified collection. The result type of the expression Edm.Double.
204 /// <param name="collection">An expression that specifies the collection for which the statistical variance should be computed</param>
205 /// <returns>A new DbFunctionExpression that produces the statistical variance value.</returns>
206 /// <exception cref="ArgumentNullException"><paramref name="collection"/> is null.</exception>
207 /// <exception cref="ArgumentException">No overload of the canonical 'VarP' function accepts an argument with the result type of <paramref name="collection"/>.</exception>
208 public static DbFunctionExpression VarP(this DbExpression collection)
210 EntityUtil.CheckArgumentNull(collection, "collection");
211 return InvokeCanonicalFunction("VarP", collection);
216 #region String functions - Concat, Contains, EndsWith, IndexOf, Left, Length, LTrim, Replace, Reverse, Right, RTrim, StartsWith, Substring, ToUpper, ToLower, Trim
219 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Concat' function with the
220 /// specified arguments, which must each have a string result type. The result type of the expression is
223 /// <param name="string1">An expression that specifies the string that should appear first in the concatenated result string.</param>
224 /// <param name="string2">An expression that specifies the string that should appear second in the concatenated result string.</param>
225 /// <returns>A new DbFunctionExpression that produces the concatenated string.</returns>
226 /// <exception cref="ArgumentNullException"><paramref name="string1"/> or <paramref name="string2"/>is null.</exception>
227 /// <exception cref="ArgumentException">No overload of the canonical 'Concat' function accepts arguments with the result types of <paramref name="string1"/> and <paramref name="string2"/>.</exception>
228 public static DbFunctionExpression Concat(this DbExpression string1, DbExpression string2)
230 EntityUtil.CheckArgumentNull(string1, "string1");
231 EntityUtil.CheckArgumentNull(string2, "string2");
232 return InvokeCanonicalFunction("Concat", string1, string2);
238 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Contains' function with the
239 /// specified arguments, which must each have a string result type. The result type of the expression is
242 /// <param name="searchedString">An expression that specifies the string to search for any occurence of <paramref name="searchedForString"/>.</param>
243 /// <param name="searchedForString">An expression that specifies the string to search for in <paramref name="searchedString"/>.</param>
244 /// <returns>A new DbFunctionExpression that returns a Boolean value indicating whether or not <paramref name="searchedForString"/> occurs within <paramref name="searchedString"/>.</returns>
245 /// <exception cref="ArgumentNullException"><paramref name="searchedString"/> or <paramref name="searchedForString"/>is null.</exception>
246 /// <exception cref="ArgumentException">No overload of the canonical 'Contains' function accepts arguments with the result types of <paramref name="searchedString"/> and <paramref name="searchedForString"/>.</exception>
247 public static DbExpression Contains(this DbExpression searchedString, DbExpression searchedForString)
249 EntityUtil.CheckArgumentNull(searchedString, "searchedString");
250 EntityUtil.CheckArgumentNull(searchedForString, "searchedForString");
251 return InvokeCanonicalFunction("Contains", searchedString, searchedForString);
255 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'EndsWith' function with the
256 /// specified arguments, which must each have a string result type. The result type of the expression is
259 /// <param name="stringArgument">An expression that specifies the string to check for the specified <param name="suffix">.</param>
260 /// <param name="suffix">An expression that specifies the suffix for which <paramref name="stringArgument"/> should be checked.</param>
261 /// <returns>A new DbFunctionExpression that indicates whether <paramref name="stringArgument"/> ends with <paramref name="suffix"/>.</returns>
262 /// <exception cref="ArgumentNullException"><paramref name="stringArgument"/> or <paramref name="suffix"/>is null.</exception>
263 /// <exception cref="ArgumentException">No overload of the canonical 'EndsWith' function accepts arguments with the result types of <paramref name="stringArgument"/> and <paramref name="suffix"/>.</exception>
264 public static DbFunctionExpression EndsWith(this DbExpression stringArgument, DbExpression suffix)
266 EntityUtil.CheckArgumentNull(stringArgument, "stringArgument");
267 EntityUtil.CheckArgumentNull(suffix, "suffix");
268 return InvokeCanonicalFunction("EndsWith", stringArgument, suffix);
272 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'IndexOf' function with the
273 /// specified arguments, which must each have a string result type. The result type of the expression is
276 /// <remarks>The index returned by IndexOf is <b>1-based</b>.</remarks>
277 /// <param name="searchString">An expression that specifies the string to search for <paramref name="stringToFind"/>.</param>
278 /// <param name="stringToFind">An expression that specifies the string to locate within <paramref name="searchString"/> should be checked.</param>
279 /// <returns>A new DbFunctionExpression that returns the first index of <paramref name="stringToFind"/> in <paramref name="searchString"/>.</returns>
280 /// <exception cref="ArgumentNullException"><paramref name="searchString"/> or <paramref name="stringToFind"/>is null.</exception>
281 /// <exception cref="ArgumentException">No overload of the canonical 'IndexOf' function accepts arguments with the result types of <paramref name="searchString"/> and <paramref name="stringToFind"/>.</exception>
282 public static DbFunctionExpression IndexOf(this DbExpression searchString, DbExpression stringToFind)
284 EntityUtil.CheckArgumentNull(searchString, "searchString");
285 EntityUtil.CheckArgumentNull(stringToFind, "stringToFind");
286 return InvokeCanonicalFunction("IndexOf", stringToFind, searchString);
290 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Left' function with the
291 /// specified arguments, which must have a string and integer numeric result type. The result type of the expression is
294 /// <param name="stringArgument">An expression that specifies the string from which to extract the leftmost substring.</param>
295 /// <param name="length">An expression that specifies the length of the leftmost substring to extract from <paramref name="stringArgument"/>.</param>
296 /// <returns>A new DbFunctionExpression that returns the the leftmost substring of length <paramref name="length"/> from <paramref name="stringArgument"/>.</returns>
297 /// <exception cref="ArgumentNullException"><paramref name="stringArgument"/> or <paramref name="length"/>is null.</exception>
298 /// <exception cref="ArgumentException">No overload of the canonical 'Left' function accepts arguments with the result types of <paramref name="stringArgument"/>.</exception>
299 public static DbFunctionExpression Left(this DbExpression stringArgument, DbExpression length)
301 EntityUtil.CheckArgumentNull(stringArgument, "stringArgument");
302 EntityUtil.CheckArgumentNull(length, "length");
303 return InvokeCanonicalFunction("Left", stringArgument, length);
307 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Length' function with the
308 /// specified argument, which must have a string result type. The result type of the expression is
311 /// <param name="stringArgument">An expression that specifies the string for which the length should be computed.</param>
312 /// <returns>A new DbFunctionExpression that returns the the length of <paramref name="stringArgument"/>.</returns>
313 /// <exception cref="ArgumentNullException"><paramref name="stringArgument"/> is null.</exception>
314 /// <exception cref="ArgumentException">No overload of the canonical 'Length' function accepts an argument with the result type of <paramref name="stringArgument"/>.</exception>
315 public static DbFunctionExpression Length(this DbExpression stringArgument)
317 EntityUtil.CheckArgumentNull(stringArgument, "stringArgument");
318 return InvokeCanonicalFunction("Length", stringArgument);
322 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Replace' function with the
323 /// specified arguments, which must each have a string result type. The result type of the expression is
326 /// <param name="stringArgument">An expression that specifies the string in which to perform the replacement operation</param>
327 /// <param name="toReplace">An expression that specifies the string to replace</param>
328 /// <param name="replacement">An expression that specifies the replacement string</param>
329 /// <returns>A new DbFunctionExpression than returns a new string based on <paramref name="stringArgument"/> where every occurence of <paramref name="toReplace"/> is replaced by <paramref name="replacement"/>.</returns>
330 /// <exception cref="ArgumentNullException"><paramref name="stringArgument"/>, <paramref name="toReplace"/> or <paramref name="replacement"/> is null.</exception>
331 /// <exception cref="ArgumentException">No overload of the canonical 'Length' function accepts arguments with the result types of <paramref name="stringArgument"/>, <paramref name="toReplace"/> and <paramref name="replacement"/>.</exception>
332 public static DbFunctionExpression Replace(this DbExpression stringArgument, DbExpression toReplace, DbExpression replacement)
334 EntityUtil.CheckArgumentNull(stringArgument, "stringArgument");
335 EntityUtil.CheckArgumentNull(toReplace, "toReplace");
336 EntityUtil.CheckArgumentNull(replacement, "replacement");
337 return InvokeCanonicalFunction("Replace", stringArgument, toReplace, replacement);
341 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Reverse' function with the
342 /// specified argument, which must have a string result type. The result type of the expression is
345 /// <param name="stringArgument">An expression that specifies the string to reverse.</param>
346 /// <returns>A new DbFunctionExpression that produces the reversed value of <paramref name="stringArgument"/>.</returns>
347 /// <exception cref="ArgumentNullException"><paramref name="stringArgument"/> is null.</exception>
348 /// <exception cref="ArgumentException">No overload of the canonical 'Reverse' function accepts an argument with the result type of <paramref name="stringArgument"/>.</exception>
349 public static DbFunctionExpression Reverse(this DbExpression stringArgument)
351 EntityUtil.CheckArgumentNull(stringArgument, "stringArgument");
352 return InvokeCanonicalFunction("Reverse", stringArgument);
356 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Right' function with the
357 /// specified arguments, which must have a string and integer numeric result type. The result type of the expression is
360 /// <param name="stringArgument">An expression that specifies the string from which to extract the rightmost substring.</param>
361 /// <param name="length">An expression that specifies the length of the rightmost substring to extract from <paramref name="stringArgument"/>.</param>
362 /// <returns>A new DbFunctionExpression that returns the the rightmost substring of length <paramref name="length"/> from <paramref name="stringArgument"/>.</returns>
363 /// <exception cref="ArgumentNullException"><paramref name="stringArgument"/> or <paramref name="length"/>is null.</exception>
364 /// <exception cref="ArgumentException">No overload of the canonical 'Right' function accepts arguments with the result types of <paramref name="stringArgument"/>.</exception>
365 public static DbFunctionExpression Right(this DbExpression stringArgument, DbExpression length)
367 EntityUtil.CheckArgumentNull(stringArgument, "stringArgument");
368 EntityUtil.CheckArgumentNull(length, "length");
369 return InvokeCanonicalFunction("Right", stringArgument, length);
373 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'StartsWith' function with the
374 /// specified arguments, which must each have a string result type. The result type of the expression is
377 /// <param name="stringArgument">An expression that specifies the string to check for the specified <param name="prefix">.</param>
378 /// <param name="suffix">An expression that specifies the prefix for which <paramref name="stringArgument"/> should be checked.</param>
379 /// <returns>A new DbFunctionExpression that indicates whether <paramref name="stringArgument"/> starts with <paramref name="prefix"/>.</returns>
380 /// <exception cref="ArgumentNullException"><paramref name="stringArgument"/> or <paramref name="prefix"/>is null.</exception>
381 /// <exception cref="ArgumentException">No overload of the canonical 'StartsWith' function accepts arguments with the result types of <paramref name="stringArgument"/> and <paramref name="prefix"/>.</exception>
382 public static DbFunctionExpression StartsWith(this DbExpression stringArgument, DbExpression prefix)
384 EntityUtil.CheckArgumentNull(stringArgument, "stringArgument");
385 EntityUtil.CheckArgumentNull(prefix, "prefix");
386 return InvokeCanonicalFunction("StartsWith", stringArgument, prefix);
392 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Substring' function with the
393 /// specified arguments, which must have a string and integer numeric result types. The result type of the
394 /// expression is string.
396 /// <remarks>Substring requires that the index specified by <paramref name="start"/> be <b>1-based</b>.</remarks>
397 /// <param name="stringArgument">An expression that specifies the string from which to extract the substring.</param>
398 /// <param name="start">An expression that specifies the starting index from which the substring should be taken.</param>
399 /// <param name="length">An expression that specifies the length of the substring.</param>
400 /// <returns>A new DbFunctionExpression that returns the substring of length <paramref name="length"/> from <paramref name="stringArgument"/> starting at <paramref name="start"/>.</returns>
401 /// <exception cref="ArgumentNullException"><paramref name="stringArgument"/>, <paramref name="start"/> or <paramref name="length"/>is null.</exception>
402 /// <exception cref="ArgumentException">No overload of the canonical 'Substring' function accepts arguments with the result types of <paramref name="stringArgument"/>, <paramref name="start"/> and <paramref name="length"/>.</exception>
403 public static DbFunctionExpression Substring(this DbExpression stringArgument, DbExpression start, DbExpression length)
405 EntityUtil.CheckArgumentNull(stringArgument, "stringArgument");
406 EntityUtil.CheckArgumentNull(start, "start");
407 EntityUtil.CheckArgumentNull(length, "length");
408 return InvokeCanonicalFunction("Substring", stringArgument, start, length);
412 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'ToLower' function with the
413 /// specified argument, which must have a string result type. The result type of the expression is
416 /// <param name="stringArgument">An expression that specifies the string that should be converted to lower case.</param>
417 /// <returns>A new DbFunctionExpression that returns value of <paramref name="stringArgument"/> converted to lower case.</returns>
418 /// <exception cref="ArgumentNullException"><paramref name="stringArgument"/> is null.</exception>
419 /// <exception cref="ArgumentException">No overload of the canonical 'ToLower' function accepts an argument with the result type of <paramref name="stringArgument"/>.</exception>
420 public static DbFunctionExpression ToLower(this DbExpression stringArgument)
422 EntityUtil.CheckArgumentNull(stringArgument, "stringArgument");
423 return InvokeCanonicalFunction("ToLower", stringArgument);
427 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'ToUpper' function with the
428 /// specified argument, which must have a string result type. The result type of the expression is
431 /// <param name="stringArgument">An expression that specifies the string that should be converted to upper case.</param>
432 /// <returns>A new DbFunctionExpression that returns value of <paramref name="stringArgument"/> converted to upper case.</returns>
433 /// <exception cref="ArgumentNullException"><paramref name="stringArgument"/> is null.</exception>
434 /// <exception cref="ArgumentException">No overload of the canonical 'ToUpper' function accepts an argument with the result type of <paramref name="stringArgument"/>.</exception>
435 public static DbFunctionExpression ToUpper(this DbExpression stringArgument)
437 EntityUtil.CheckArgumentNull(stringArgument, "stringArgument");
438 return InvokeCanonicalFunction("ToUpper", stringArgument);
442 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Trim' function with the
443 /// specified argument, which must have a string result type. The result type of the expression is
446 /// <param name="stringArgument">An expression that specifies the string from which leading and trailing space should be removed.</param>
447 /// <returns>A new DbFunctionExpression that returns value of <paramref name="stringArgument"/> with leading and trailing space removed.</returns>
448 /// <exception cref="ArgumentNullException"><paramref name="stringArgument"/> is null.</exception>
449 /// <exception cref="ArgumentException">No overload of the canonical 'Trim' function accepts an argument with the result type of <paramref name="stringArgument"/>.</exception>
450 public static DbFunctionExpression Trim(this DbExpression stringArgument)
452 EntityUtil.CheckArgumentNull(stringArgument, "stringArgument");
453 return InvokeCanonicalFunction("Trim", stringArgument);
457 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'RTrim' function with the
458 /// specified argument, which must have a string result type. The result type of the expression is
461 /// <param name="stringArgument">An expression that specifies the string from which trailing space should be removed.</param>
462 /// <returns>A new DbFunctionExpression that returns value of <paramref name="stringArgument"/> with trailing space removed.</returns>
463 /// <exception cref="ArgumentNullException"><paramref name="stringArgument"/> is null.</exception>
464 /// <exception cref="ArgumentException">No overload of the canonical 'RTrim' function accepts an argument with the result type of <paramref name="stringArgument"/>.</exception>
465 public static DbFunctionExpression TrimEnd(this DbExpression stringArgument)
467 EntityUtil.CheckArgumentNull(stringArgument, "stringArgument");
468 return InvokeCanonicalFunction("RTrim", stringArgument);
472 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'LTrim' function with the
473 /// specified argument, which must have a string result type. The result type of the expression is
476 /// <param name="stringArgument">An expression that specifies the string from which leading space should be removed.</param>
477 /// <returns>A new DbFunctionExpression that returns value of <paramref name="stringArgument"/> with leading space removed.</returns>
478 /// <exception cref="ArgumentNullException"><paramref name="stringArgument"/> is null.</exception>
479 /// <exception cref="ArgumentException">No overload of the canonical 'LTrim' function accepts an argument with the result type of <paramref name="stringArgument"/>.</exception>
480 public static DbFunctionExpression TrimStart(this DbExpression stringArgument)
482 EntityUtil.CheckArgumentNull(stringArgument, "stringArgument");
483 return InvokeCanonicalFunction("LTrim", stringArgument);
488 #region Date/Time member access methods - Year, Month, Day, DayOfYear, Hour, Minute, Second, Millisecond, GetTotalOffsetMinutes
491 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Year' function with the
492 /// specified argument, which must have a DateTime or DateTimeOffset result type. The result type of
493 /// the expression is Edm.Int32.
495 /// <param name="dateValue">An expression that specifies the value from which the year should be retrieved.</param>
496 /// <returns>A new DbFunctionExpression that returns the integer year value from <paramref name="dateValue"/>.</returns>
497 /// <exception cref="ArgumentNullException"><paramref name="dateValue"/> is null.</exception>
498 /// <exception cref="ArgumentException">No overload of the canonical 'Year' function accepts an argument with the result type of <paramref name="dateValue"/>.</exception>
499 public static DbFunctionExpression Year(this DbExpression dateValue)
501 EntityUtil.CheckArgumentNull(dateValue, "dateValue");
502 return InvokeCanonicalFunction("Year", dateValue);
506 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Month' function with the
507 /// specified argument, which must have a DateTime or DateTimeOffset result type. The result type of
508 /// the expression is Edm.Int32.
510 /// <param name="dateValue">An expression that specifies the value from which the month should be retrieved.</param>
511 /// <returns>A new DbFunctionExpression that returns the integer month value from <paramref name="dateValue"/>.</returns>
512 /// <exception cref="ArgumentNullException"><paramref name="dateValue"/> is null.</exception>
513 /// <exception cref="ArgumentException">No overload of the canonical 'Month' function accepts an argument with the result type of <paramref name="dateValue"/>.</exception>
514 public static DbFunctionExpression Month(this DbExpression dateValue)
516 EntityUtil.CheckArgumentNull(dateValue, "dateValue");
517 return InvokeCanonicalFunction("Month", dateValue);
521 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Day' function with the
522 /// specified argument, which must have a DateTime or DateTimeOffset result type. The result type of
523 /// the expression is Edm.Int32.
525 /// <param name="dateValue">An expression that specifies the value from which the day should be retrieved.</param>
526 /// <returns>A new DbFunctionExpression that returns the integer day value from <paramref name="dateValue"/>.</returns>
527 /// <exception cref="ArgumentNullException"><paramref name="dateValue"/> is null.</exception>
528 /// <exception cref="ArgumentException">No overload of the canonical 'Day' function accepts an argument with the result type of <paramref name="dateValue"/>.</exception>
529 public static DbFunctionExpression Day(this DbExpression dateValue)
531 EntityUtil.CheckArgumentNull(dateValue, "dateValue");
532 return InvokeCanonicalFunction("Day", dateValue);
536 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'DayOfYear' function with the
537 /// specified argument, which must have a DateTime or DateTimeOffset result type. The result type of
538 /// the expression is Edm.Int32.
540 /// <param name="dateValue">An expression that specifies the value from which the day within the year should be retrieved.</param>
541 /// <returns>A new DbFunctionExpression that returns the integer day of year value from <paramref name="dateValue"/>.</returns>
542 /// <exception cref="ArgumentNullException"><paramref name="dateValue"/> is null.</exception>
543 /// <exception cref="ArgumentException">No overload of the canonical 'DayOfYear' function accepts an argument with the result type of <paramref name="dateValue"/>.</exception>
544 public static DbFunctionExpression DayOfYear(this DbExpression dateValue)
546 EntityUtil.CheckArgumentNull(dateValue, "dateValue");
547 return InvokeCanonicalFunction("DayOfYear", dateValue);
551 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Hour' function with the
552 /// specified argument, which must have a DateTime, DateTimeOffset or Time result type. The result type of
553 /// the expression is Edm.Int32.
555 /// <param name="timeValue">An expression that specifies the value from which the hour should be retrieved.</param>
556 /// <returns>A new DbFunctionExpression that returns the integer hour value from <paramref name="timeValue"/>.</returns>
557 /// <exception cref="ArgumentNullException"><paramref name="timeValue"/> is null.</exception>
558 /// <exception cref="ArgumentException">No overload of the canonical 'Hour' function accepts an argument with the result type of <paramref name="timeValue"/>.</exception>
559 public static DbFunctionExpression Hour(this DbExpression timeValue)
561 EntityUtil.CheckArgumentNull(timeValue, "timeValue");
562 return InvokeCanonicalFunction("Hour", timeValue);
566 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Minute' function with the
567 /// specified argument, which must have a DateTime, DateTimeOffset or Time result type. The result type of
568 /// the expression is Edm.Int32.
570 /// <param name="timeValue">An expression that specifies the value from which the minute should be retrieved.</param>
571 /// <returns>A new DbFunctionExpression that returns the integer minute value from <paramref name="timeValue"/>.</returns>
572 /// <exception cref="ArgumentNullException"><paramref name="timeValue"/> is null.</exception>
573 /// <exception cref="ArgumentException">No overload of the canonical 'Minute' function accepts an argument with the result type of <paramref name="timeValue"/>.</exception>
574 public static DbFunctionExpression Minute(this DbExpression timeValue)
576 EntityUtil.CheckArgumentNull(timeValue, "timeValue");
577 return InvokeCanonicalFunction("Minute", timeValue);
581 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Second' function with the
582 /// specified argument, which must have a DateTime, DateTimeOffset or Time result type. The result type of
583 /// the expression is Edm.Int32.
585 /// <param name="timeValue">An expression that specifies the value from which the second should be retrieved.</param>
586 /// <returns>A new DbFunctionExpression that returns the integer second value from <paramref name="timeValue"/>.</returns>
587 /// <exception cref="ArgumentNullException"><paramref name="timeValue"/> is null.</exception>
588 /// <exception cref="ArgumentException">No overload of the canonical 'Second' function accepts an argument with the result type of <paramref name="timeValue"/>.</exception>
589 public static DbFunctionExpression Second(this DbExpression timeValue)
591 EntityUtil.CheckArgumentNull(timeValue, "timeValue");
592 return InvokeCanonicalFunction("Second", timeValue);
596 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Millisecond' function with the
597 /// specified argument, which must have a DateTime, DateTimeOffset or Time result type. The result type of
598 /// the expression is Edm.Int32.
600 /// <param name="timeValue">An expression that specifies the value from which the millisecond should be retrieved.</param>
601 /// <returns>A new DbFunctionExpression that returns the integer millisecond value from <paramref name="timeValue"/>.</returns>
602 /// <exception cref="ArgumentNullException"><paramref name="timeValue"/> is null.</exception>
603 /// <exception cref="ArgumentException">No overload of the canonical 'Millisecond' function accepts an argument with the result type of <paramref name="timeValue"/>.</exception>
604 public static DbFunctionExpression Millisecond(this DbExpression timeValue)
606 EntityUtil.CheckArgumentNull(timeValue, "timeValue");
607 return InvokeCanonicalFunction("Millisecond", timeValue);
611 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'GetTotalOffsetMinutes' function with the
612 /// specified argument, which must have a DateTimeOffset result type. The result type of the expression is Edm.Int32.
614 /// <param name="dateTimeOffsetArgument">An expression that specifies the DateTimeOffset value from which the minute offset from GMT should be retrieved.</param>
615 /// <returns>A new DbFunctionExpression that returns the number of minutes <paramref name="dateTimeOffsetArgument"/> is offset from GMT.</returns>
616 /// <exception cref="ArgumentNullException"><paramref name="dateTimeOffsetArgument"/> is null.</exception>
617 /// <exception cref="ArgumentException">No overload of the canonical 'GetTotalOffsetMinutes' function accepts an argument with the result type of <paramref name="dateTimeOffsetArgument"/>.</exception>
618 public static DbFunctionExpression GetTotalOffsetMinutes(this DbExpression dateTimeOffsetArgument)
620 EntityUtil.CheckArgumentNull(dateTimeOffsetArgument, "dateTimeOffsetArgument");
621 return InvokeCanonicalFunction("GetTotalOffsetMinutes", dateTimeOffsetArgument);
626 #region Date/Time creation methods - CurrentDateTime, CurrentDateTimeOffset, CurrentUtcDateTime, CreateDateTime, CreateDateTimeOffset, CreateTime, TruncateTime
629 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'CurrentDateTime' function.
631 /// <returns>A new DbFunctionExpression that returns the current date and time as an Edm.DateTime instance.</returns>
632 public static DbFunctionExpression CurrentDateTime()
634 return InvokeCanonicalFunction("CurrentDateTime");
638 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'CurrentDateTimeOffset' function.
640 /// <returns>A new DbFunctionExpression that returns the current date and time as an Edm.DateTimeOffset instance.</returns>
641 public static DbFunctionExpression CurrentDateTimeOffset()
643 return InvokeCanonicalFunction("CurrentDateTimeOffset");
647 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'CurrentUtcDateTime' function.
649 /// <returns>A new DbFunctionExpression that returns the current UTC date and time as an Edm.DateTime instance.</returns>
650 public static DbFunctionExpression CurrentUtcDateTime()
652 return InvokeCanonicalFunction("CurrentUtcDateTime");
656 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'TruncateTime' function with the
657 /// specified argument, which must have a DateTime or DateTimeOffset result type. The result type of the
658 /// expression is the same as the result type of <paramref name="dateValue"/>.
660 /// <param name="dateValue">An expression that specifies the value for which the time portion should be truncated.</param>
661 /// <returns>A new DbFunctionExpression that returns the value of <paramref name="dateValue"/> with time set to zero.</returns>
662 /// <exception cref="ArgumentNullException"><paramref name="dateValue"/> is null.</exception>
663 /// <exception cref="ArgumentException">No overload of the canonical 'TruncateTime' function accepts an argument with the result type of <paramref name="dateValue"/>.</exception>
664 public static DbFunctionExpression TruncateTime(this DbExpression dateValue)
666 EntityUtil.CheckArgumentNull(dateValue, "dateValue");
667 return InvokeCanonicalFunction("TruncateTime", dateValue);
671 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'CreateDateTime' function with the
672 /// specified arguments. <paramref name="second"/> must have a result type of Edm.Double, while all other arguments
673 /// must have a result type of Edm.Int32. The result type of the expression is Edm.DateTime.
675 /// <param name="year">An expression that provides the year value for the new DateTime instance.</param>
676 /// <param name="month">An expression that provides the month value for the new DateTime instance.</param>
677 /// <param name="day">An expression that provides the day value for the new DateTime instance.</param>
678 /// <param name="hour">An expression that provides the hour value for the new DateTime instance.</param>
679 /// <param name="minute">An expression that provides the minute value for the new DateTime instance.</param>
680 /// <param name="second">An expression that provides the second value for the new DateTime instance.</param>
681 /// <returns>A new DbFunctionExpression that returns a new DateTime based on the specified values.</returns>
682 /// <exception cref="ArgumentNullException"><paramref name="year"/>, <paramref name="month"/>, <paramref name="day"/>, <paramref name="hour"/>, <paramref name="minute"/>, or <paramref name="second"/> is null.</exception>
683 /// <exception cref="ArgumentException">No overload of the canonical 'CreateDateTime' function accepts arguments with the result types of <paramref name="year"/>, <paramref name="month"/>, <paramref name="day"/>, <paramref name="hour"/>, <paramref name="minute"/>, and <paramref name="second"/>.</exception>
684 public static DbFunctionExpression CreateDateTime(DbExpression year, DbExpression month, DbExpression day, DbExpression hour, DbExpression minute, DbExpression second)
686 EntityUtil.CheckArgumentNull(year, "year");
687 EntityUtil.CheckArgumentNull(month, "month");
688 EntityUtil.CheckArgumentNull(day, "day");
689 EntityUtil.CheckArgumentNull(hour, "hour");
690 EntityUtil.CheckArgumentNull(minute, "minute");
691 EntityUtil.CheckArgumentNull(second, "second");
692 return InvokeCanonicalFunction("CreateDateTime", year, month, day, hour, minute, second);
696 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'CreateDateTimeOffset' function with the
697 /// specified arguments. <paramref name="second"/> must have a result type of Edm.Double, while all other arguments
698 /// must have a result type of Edm.Int32. The result type of the expression is Edm.DateTimeOffset.
700 /// <param name="year">An expression that provides the year value for the new DateTimeOffset instance.</param>
701 /// <param name="month">An expression that provides the month value for the new DateTimeOffset instance.</param>
702 /// <param name="day">An expression that provides the day value for the new DateTimeOffset instance.</param>
703 /// <param name="hour">An expression that provides the hour value for the new DateTimeOffset instance.</param>
704 /// <param name="minute">An expression that provides the minute value for the new DateTimeOffset instance.</param>
705 /// <param name="second">An expression that provides the second value for the new DateTimeOffset instance.</param>
706 /// <param name="timeZoneOffset">An expression that provides the number of minutes in the time zone offset value for the new DateTimeOffset instance.</param>
707 /// <returns>A new DbFunctionExpression that returns a new DateTimeOffset based on the specified values.</returns>
708 /// <exception cref="ArgumentNullException"><paramref name="year"/>, <paramref name="month"/>, <paramref name="day"/>, <paramref name="hour"/>, <paramref name="minute"/>, <paramref name="second"/> or <paramref name="timeZoneOffset"/> is null.</exception>
709 /// <exception cref="ArgumentException">No overload of the canonical 'CreateDateTimeOffset' function accepts arguments with the result types of <paramref name="year"/>, <paramref name="month"/>, <paramref name="day"/>, <paramref name="hour"/>, <paramref name="minute"/>, <paramref name="second"/> and <paramref name="timeZoneOffset"/>.</exception>
710 public static DbFunctionExpression CreateDateTimeOffset(DbExpression year, DbExpression month, DbExpression day, DbExpression hour, DbExpression minute, DbExpression second, DbExpression timeZoneOffset)
712 EntityUtil.CheckArgumentNull(year, "year");
713 EntityUtil.CheckArgumentNull(month, "month");
714 EntityUtil.CheckArgumentNull(day, "day");
715 EntityUtil.CheckArgumentNull(hour, "hour");
716 EntityUtil.CheckArgumentNull(minute, "minute");
717 EntityUtil.CheckArgumentNull(second, "second");
718 EntityUtil.CheckArgumentNull(timeZoneOffset, "timeZoneOffset");
719 return InvokeCanonicalFunction("CreateDateTimeOffset", year, month, day, hour, minute, second, timeZoneOffset);
723 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'CreateTime' function with the
724 /// specified arguments. <paramref name="second"/> must have a result type of Edm.Double, while all other arguments
725 /// must have a result type of Edm.Int32. The result type of the expression is Edm.Time.
727 /// <param name="hour">An expression that provides the hour value for the new DateTime instance.</param>
728 /// <param name="minute">An expression that provides the minute value for the new DateTime instance.</param>
729 /// <param name="second">An expression that provides the second value for the new DateTime instance.</param>
730 /// <returns>A new DbFunctionExpression that returns a new Time based on the specified values.</returns>
731 /// <exception cref="ArgumentNullException"><paramref name="hour"/>, <paramref name="minute"/>, or <paramref name="second"/> is null.</exception>
732 /// <exception cref="ArgumentException">No overload of the canonical 'CreateTime' function accepts arguments with the result types of <paramref name="hour"/>, <paramref name="minute"/>, and <paramref name="second"/>.</exception>
733 public static DbFunctionExpression CreateTime(DbExpression hour, DbExpression minute, DbExpression second)
735 EntityUtil.CheckArgumentNull(hour, "hour");
736 EntityUtil.CheckArgumentNull(minute, "minute");
737 EntityUtil.CheckArgumentNull(second, "second");
738 return InvokeCanonicalFunction("CreateTime", hour, minute, second);
743 #region Date/Time addition - AddYears, AddMonths, AddDays, AddHours, AddMinutes, AddSeconds, AddMilliseconds, AddMicroseconds, AddNanoseconds
746 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'AddYears' function with the
747 /// specified arguments, which must have DateTime or DateTimeOffset and integer result types. The result
748 /// type of the expression is the same as the result type of <paramref name="dateValue"/>.
750 /// <param name="dateValue">An expression that specifies the value to which <paramref name="addValue"/>should be added.</param>
751 /// <param name="addValue">An expression that specifies the number of years to add to <paramref name="dateValue"/>.</param>
752 /// <returns>A new DbFunctionExpression that adds the number of years specified by <paramref name="addValue"/> to the value specified by <paramref name="dateValue"/>.</returns>
753 /// <exception cref="ArgumentNullException"><paramref name="dateValue"/> or <paramref name="addValue"/> is null.</exception>
754 /// <exception cref="ArgumentException">No overload of the canonical 'AddYears' function accepts arguments with the result types of <paramref name="dateValue"/> and <paramref name="addValue"/>.</exception>
755 public static DbFunctionExpression AddYears(this DbExpression dateValue, DbExpression addValue)
757 EntityUtil.CheckArgumentNull(dateValue, "dateValue");
758 EntityUtil.CheckArgumentNull(addValue, "addValue");
759 return InvokeCanonicalFunction("AddYears", dateValue, addValue);
763 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'AddMonths' function with the
764 /// specified arguments, which must have DateTime or DateTimeOffset and integer result types. The result
765 /// type of the expression is the same as the result type of <paramref name="dateValue"/>.
767 /// <param name="dateValue">An expression that specifies the value to which <paramref name="addValue"/>should be added.</param>
768 /// <param name="addValue">An expression that specifies the number of months to add to <paramref name="dateValue"/>.</param>
769 /// <returns>A new DbFunctionExpression that adds the number of months specified by <paramref name="addValue"/> to the value specified by <paramref name="dateValue"/>.</returns>
770 /// <exception cref="ArgumentNullException"><paramref name="dateValue"/> or <paramref name="addValue"/> is null.</exception>
771 /// <exception cref="ArgumentException">No overload of the canonical 'AddMonths' function accepts arguments with the result types of <paramref name="dateValue"/> and <paramref name="addValue"/>.</exception>
772 public static DbFunctionExpression AddMonths(this DbExpression dateValue, DbExpression addValue)
774 EntityUtil.CheckArgumentNull(dateValue, "dateValue");
775 EntityUtil.CheckArgumentNull(addValue, "addValue");
776 return InvokeCanonicalFunction("AddMonths", dateValue, addValue);
780 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'AddDays' function with the
781 /// specified arguments, which must have DateTime or DateTimeOffset and integer result types. The result
782 /// type of the expression is the same as the result type of <paramref name="dateValue"/>.
784 /// <param name="dateValue">An expression that specifies the value to which <paramref name="addValue"/>should be added.</param>
785 /// <param name="addValue">An expression that specifies the number of days to add to <paramref name="dateValue"/>.</param>
786 /// <returns>A new DbFunctionExpression that adds the number of days specified by <paramref name="addValue"/> to the value specified by <paramref name="dateValue"/>.</returns>
787 /// <exception cref="ArgumentNullException"><paramref name="dateValue"/> or <paramref name="addValue"/> is null.</exception>
788 /// <exception cref="ArgumentException">No overload of the canonical 'AddDays' function accepts arguments with the result types of <paramref name="dateValue"/> and <paramref name="addValue"/>.</exception>
789 public static DbFunctionExpression AddDays(this DbExpression dateValue, DbExpression addValue)
791 EntityUtil.CheckArgumentNull(dateValue, "dateValue");
792 EntityUtil.CheckArgumentNull(addValue, "addValue");
793 return InvokeCanonicalFunction("AddDays", dateValue, addValue);
797 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'AddHours' function with the
798 /// specified arguments, which must have DateTime, DateTimeOffset or Time, and integer result types. The result
799 /// type of the expression is the same as the result type of <paramref name="timeValue"/>.
801 /// <param name="timeValue">An expression that specifies the value to which <paramref name="addValue"/>should be added.</param>
802 /// <param name="addValue">An expression that specifies the number of hours to add to <paramref name="timeValue"/>.</param>
803 /// <returns>A new DbFunctionExpression that adds the number of hours specified by <paramref name="addValue"/> to the value specified by <paramref name="timeValue"/>.</returns>
804 /// <exception cref="ArgumentNullException"><paramref name="timeValue"/> or <paramref name="addValue"/> is null.</exception>
805 /// <exception cref="ArgumentException">No overload of the canonical 'AddHours' function accepts arguments with the result types of <paramref name="timeValue"/> and <paramref name="addValue"/>.</exception>
806 public static DbFunctionExpression AddHours(this DbExpression timeValue, DbExpression addValue)
808 EntityUtil.CheckArgumentNull(timeValue, "timeValue");
809 EntityUtil.CheckArgumentNull(addValue, "addValue");
810 return InvokeCanonicalFunction("AddHours", timeValue, addValue);
814 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'AddMinutes' function with the
815 /// specified arguments, which must have DateTime, DateTimeOffset or Time, and integer result types. The result
816 /// type of the expression is the same as the result type of <paramref name="timeValue"/>.
818 /// <param name="timeValue">An expression that specifies the value to which <paramref name="addValue"/>should be added.</param>
819 /// <param name="addValue">An expression that specifies the number of minutes to add to <paramref name="timeValue"/>.</param>
820 /// <returns>A new DbFunctionExpression that adds the number of minutes specified by <paramref name="addValue"/> to the value specified by <paramref name="timeValue"/>.</returns>
821 /// <exception cref="ArgumentNullException"><paramref name="timeValue"/> or <paramref name="addValue"/> is null.</exception>
822 /// <exception cref="ArgumentException">No overload of the canonical 'AddMinutes' function accepts arguments with the result types of <paramref name="timeValue"/> and <paramref name="addValue"/>.</exception>
823 public static DbFunctionExpression AddMinutes(this DbExpression timeValue, DbExpression addValue)
825 EntityUtil.CheckArgumentNull(timeValue, "timeValue");
826 EntityUtil.CheckArgumentNull(addValue, "addValue");
827 return InvokeCanonicalFunction("AddMinutes", timeValue, addValue);
831 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'AddSeconds' function with the
832 /// specified arguments, which must have DateTime, DateTimeOffset or Time, and integer result types. The result
833 /// type of the expression is the same as the result type of <paramref name="timeValue"/>.
835 /// <param name="timeValue">An expression that specifies the value to which <paramref name="addValue"/>should be added.</param>
836 /// <param name="addValue">An expression that specifies the number of seconds to add to <paramref name="timeValue"/>.</param>
837 /// <returns>A new DbFunctionExpression that adds the number of seconds specified by <paramref name="addValue"/> to the value specified by <paramref name="timeValue"/>.</returns>
838 /// <exception cref="ArgumentNullException"><paramref name="timeValue"/> or <paramref name="addValue"/> is null.</exception>
839 /// <exception cref="ArgumentException">No overload of the canonical 'AddSeconds' function accepts arguments with the result types of <paramref name="timeValue"/> and <paramref name="addValue"/>.</exception>
840 public static DbFunctionExpression AddSeconds(this DbExpression timeValue, DbExpression addValue)
842 EntityUtil.CheckArgumentNull(timeValue, "timeValue");
843 EntityUtil.CheckArgumentNull(addValue, "addValue");
844 return InvokeCanonicalFunction("AddSeconds", timeValue, addValue);
848 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'AddMilliseconds' function with the
849 /// specified arguments, which must have DateTime, DateTimeOffset or Time, and integer result types. The result
850 /// type of the expression is the same as the result type of <paramref name="timeValue"/>.
852 /// <param name="timeValue">An expression that specifies the value to which <paramref name="addValue"/>should be added.</param>
853 /// <param name="addValue">An expression that specifies the number of milliseconds to add to <paramref name="timeValue"/>.</param>
854 /// <returns>A new DbFunctionExpression that adds the number of milliseconds specified by <paramref name="addValue"/> to the value specified by <paramref name="timeValue"/>.</returns>
855 /// <exception cref="ArgumentNullException"><paramref name="timeValue"/> or <paramref name="addValue"/> is null.</exception>
856 /// <exception cref="ArgumentException">No overload of the canonical 'AddMilliseconds' function accepts arguments with the result types of <paramref name="timeValue"/> and <paramref name="addValue"/>.</exception>
857 public static DbFunctionExpression AddMilliseconds(this DbExpression timeValue, DbExpression addValue)
859 EntityUtil.CheckArgumentNull(timeValue, "timeValue");
860 EntityUtil.CheckArgumentNull(addValue, "addValue");
861 return InvokeCanonicalFunction("AddMilliseconds", timeValue, addValue);
865 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'AddMicroseconds' function with the
866 /// specified arguments, which must have DateTime, DateTimeOffset or Time, and integer result types. The result
867 /// type of the expression is the same as the result type of <paramref name="timeValue"/>.
869 /// <param name="timeValue">An expression that specifies the value to which <paramref name="addValue"/>should be added.</param>
870 /// <param name="addValue">An expression that specifies the number of microseconds to add to <paramref name="timeValue"/>.</param>
871 /// <returns>A new DbFunctionExpression that adds the number of microseconds specified by <paramref name="addValue"/> to the value specified by <paramref name="timeValue"/>.</returns>
872 /// <exception cref="ArgumentNullException"><paramref name="timeValue"/> or <paramref name="addValue"/> is null.</exception>
873 /// <exception cref="ArgumentException">No overload of the canonical 'AddMicroseconds' function accepts arguments with the result types of <paramref name="timeValue"/> and <paramref name="addValue"/>.</exception>
874 public static DbFunctionExpression AddMicroseconds(this DbExpression timeValue, DbExpression addValue)
876 EntityUtil.CheckArgumentNull(timeValue, "timeValue");
877 EntityUtil.CheckArgumentNull(addValue, "addValue");
878 return InvokeCanonicalFunction("AddMicroseconds", timeValue, addValue);
882 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'AddNanoseconds' function with the
883 /// specified arguments, which must have DateTime, DateTimeOffset or Time, and integer result types. The result
884 /// type of the expression is the same as the result type of <paramref name="timeValue"/>.
886 /// <param name="timeValue">An expression that specifies the value to which <paramref name="addValue"/>should be added.</param>
887 /// <param name="addValue">An expression that specifies the number of nanoseconds to add to <paramref name="timeValue"/>.</param>
888 /// <returns>A new DbFunctionExpression that adds the number of nanoseconds specified by <paramref name="addValue"/> to the value specified by <paramref name="timeValue"/>.</returns>
889 /// <exception cref="ArgumentNullException"><paramref name="timeValue"/> or <paramref name="addValue"/> is null.</exception>
890 /// <exception cref="ArgumentException">No overload of the canonical 'AddNanoseconds' function accepts arguments with the result types of <paramref name="timeValue"/> and <paramref name="addValue"/>.</exception>
891 public static DbFunctionExpression AddNanoseconds(this DbExpression timeValue, DbExpression addValue)
893 EntityUtil.CheckArgumentNull(timeValue, "timeValue");
894 EntityUtil.CheckArgumentNull(addValue, "addValue");
895 return InvokeCanonicalFunction("AddNanoseconds", timeValue, addValue);
900 #region Date/Time difference - DiffYears, DiffMonths, DiffDays, DiffHours, DiffMinutes, DiffSeconds, DiffMilliseconds, DiffMicroseconds, DiffNanoseconds
903 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'DiffYears' function with the
904 /// specified arguments, which must each have a DateTime or DateTimeOffset result type. The result type of
905 /// <paramref name="dateValue1"/> must match the result type of <paramref name="dateValue2"/>.
906 /// The result type of the expression is Edm.Int32.
908 /// <param name="dateValue1">An expression that specifies the first DateTime or DateTimeOffset value.</param>
909 /// <param name="dateValue2">An expression that specifies the DateTime or DateTimeOffset for which the year difference from <paramref name="dateValue1"/> should be calculated.</param>
910 /// <returns>A new DbFunctionExpression that returns the year difference between <param name="dateValue1"> and <param name="dateValue2">.</returns>
911 /// <exception cref="ArgumentNullException"><paramref name="dateValue1"/> or <paramref name="dateValue2"/> is null.</exception>
912 /// <exception cref="ArgumentException">No overload of the canonical 'DiffYears' function accepts arguments with the result types of <paramref name="dateValue1"/> and <paramref name="dateValue2"/>.</exception>
913 public static DbFunctionExpression DiffYears(this DbExpression dateValue1, DbExpression dateValue2)
915 EntityUtil.CheckArgumentNull(dateValue1, "dateValue1");
916 EntityUtil.CheckArgumentNull(dateValue2, "dateValue2");
917 return InvokeCanonicalFunction("DiffYears", dateValue1, dateValue2);
921 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'DiffMonths' function with the
922 /// specified arguments, which must each have a DateTime or DateTimeOffset result type. The result type of
923 /// <paramref name="dateValue1"/> must match the result type of <paramref name="dateValue2"/>.
924 /// The result type of the expression is Edm.Int32.
926 /// <param name="dateValue1">An expression that specifies the first DateTime or DateTimeOffset value.</param>
927 /// <param name="dateValue2">An expression that specifies the DateTime or DateTimeOffset for which the month difference from <paramref name="dateValue1"/> should be calculated.</param>
928 /// <returns>A new DbFunctionExpression that returns the month difference between <param name="dateValue1"> and <param name="dateValue2">.</returns>
929 /// <exception cref="ArgumentNullException"><paramref name="dateValue1"/> or <paramref name="dateValue2"/> is null.</exception>
930 /// <exception cref="ArgumentException">No overload of the canonical 'DiffMonths' function accepts arguments with the result types of <paramref name="dateValue1"/> and <paramref name="dateValue2"/>.</exception>
931 public static DbFunctionExpression DiffMonths(this DbExpression dateValue1, DbExpression dateValue2)
933 EntityUtil.CheckArgumentNull(dateValue1, "dateValue1");
934 EntityUtil.CheckArgumentNull(dateValue2, "dateValue2");
935 return InvokeCanonicalFunction("DiffMonths", dateValue1, dateValue2);
939 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'DiffDays' function with the
940 /// specified arguments, which must each have a DateTime or DateTimeOffset result type. The result type of
941 /// <paramref name="dateValue1"/> must match the result type of <paramref name="dateValue2"/>.
942 /// The result type of the expression is Edm.Int32.
944 /// <param name="dateValue1">An expression that specifies the first DateTime or DateTimeOffset value.</param>
945 /// <param name="dateValue2">An expression that specifies the DateTime or DateTimeOffset for which the day difference from <paramref name="dateValue1"/> should be calculated.</param>
946 /// <returns>A new DbFunctionExpression that returns the day difference between <param name="dateValue1"> and <param name="dateValue2">.</returns>
947 /// <exception cref="ArgumentNullException"><paramref name="dateValue1"/> or <paramref name="dateValue2"/> is null.</exception>
948 /// <exception cref="ArgumentException">No overload of the canonical 'DiffDays' function accepts arguments with the result types of <paramref name="dateValue1"/> and <paramref name="dateValue2"/>.</exception>
949 public static DbFunctionExpression DiffDays(this DbExpression dateValue1, DbExpression dateValue2)
951 EntityUtil.CheckArgumentNull(dateValue1, "dateValue1");
952 EntityUtil.CheckArgumentNull(dateValue2, "dateValue2");
953 return InvokeCanonicalFunction("DiffDays", dateValue1, dateValue2);
957 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'DiffHours' function with the
958 /// specified arguments, which must each have a DateTime, DateTimeOffset or Time result type. The result type of
959 /// <paramref name="timeValue1"/> must match the result type of <paramref name="timeValue2"/>.
960 /// The result type of the expression is Edm.Int32.
962 /// <param name="timeValue1">An expression that specifies the first DateTime, DateTimeOffset or Time value.</param>
963 /// <param name="timeValue2">An expression that specifies the DateTime, DateTimeOffset or Time for which the hour difference from <paramref name="timeValue1"/> should be calculated.</param>
964 /// <returns>A new DbFunctionExpression that returns the hour difference between <param name="timeValue1"> and <param name="timeValue2">.</returns>
965 /// <exception cref="ArgumentNullException"><paramref name="timeValue1"/> or <paramref name="timeValue2"/> is null.</exception>
966 /// <exception cref="ArgumentException">No overload of the canonical 'DiffHours' function accepts arguments with the result types of <paramref name="timeValue1"/> and <paramref name="timeValue2"/>.</exception>
967 public static DbFunctionExpression DiffHours(this DbExpression timeValue1, DbExpression timeValue2)
969 EntityUtil.CheckArgumentNull(timeValue1, "timeValue1");
970 EntityUtil.CheckArgumentNull(timeValue2, "timeValue2");
971 return InvokeCanonicalFunction("DiffHours", timeValue1, timeValue2);
975 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'DiffMinutes' function with the
976 /// specified arguments, which must each have a DateTime, DateTimeOffset or Time result type. The result type of
977 /// <paramref name="timeValue1"/> must match the result type of <paramref name="timeValue2"/>.
978 /// The result type of the expression is Edm.Int32.
980 /// <param name="timeValue1">An expression that specifies the first DateTime, DateTimeOffset or Time value.</param>
981 /// <param name="timeValue2">An expression that specifies the DateTime, DateTimeOffset or Time for which the minute difference from <paramref name="timeValue1"/> should be calculated.</param>
982 /// <returns>A new DbFunctionExpression that returns the minute difference between <param name="timeValue1"> and <param name="timeValue2">.</returns>
983 /// <exception cref="ArgumentNullException"><paramref name="timeValue1"/> or <paramref name="timeValue2"/> is null.</exception>
984 /// <exception cref="ArgumentException">No overload of the canonical 'DiffMinutes' function accepts arguments with the result types of <paramref name="timeValue1"/> and <paramref name="timeValue2"/>.</exception>
985 public static DbFunctionExpression DiffMinutes(this DbExpression timeValue1, DbExpression timeValue2)
987 EntityUtil.CheckArgumentNull(timeValue1, "timeValue1");
988 EntityUtil.CheckArgumentNull(timeValue2, "timeValue2");
989 return InvokeCanonicalFunction("DiffMinutes", timeValue1, timeValue2);
993 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'DiffSeconds' function with the
994 /// specified arguments, which must each have a DateTime, DateTimeOffset or Time result type. The result type of
995 /// <paramref name="timeValue1"/> must match the result type of <paramref name="timeValue2"/>.
996 /// The result type of the expression is Edm.Int32.
998 /// <param name="timeValue1">An expression that specifies the first DateTime, DateTimeOffset or Time value.</param>
999 /// <param name="timeValue2">An expression that specifies the DateTime, DateTimeOffset or Time for which the second difference from <paramref name="timeValue1"/> should be calculated.</param>
1000 /// <returns>A new DbFunctionExpression that returns the second difference between <param name="timeValue1"> and <param name="timeValue2">.</returns>
1001 /// <exception cref="ArgumentNullException"><paramref name="timeValue1"/> or <paramref name="timeValue2"/> is null.</exception>
1002 /// <exception cref="ArgumentException">No overload of the canonical 'DiffSeconds' function accepts arguments with the result types of <paramref name="timeValue1"/> and <paramref name="timeValue2"/>.</exception>
1003 public static DbFunctionExpression DiffSeconds(this DbExpression timeValue1, DbExpression timeValue2)
1005 EntityUtil.CheckArgumentNull(timeValue1, "timeValue1");
1006 EntityUtil.CheckArgumentNull(timeValue2, "timeValue2");
1007 return InvokeCanonicalFunction("DiffSeconds", timeValue1, timeValue2);
1011 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'DiffMilliseconds' function with the
1012 /// specified arguments, which must each have a DateTime, DateTimeOffset or Time result type. The result type of
1013 /// <paramref name="timeValue1"/> must match the result type of <paramref name="timeValue2"/>.
1014 /// The result type of the expression is Edm.Int32.
1016 /// <param name="timeValue1">An expression that specifies the first DateTime, DateTimeOffset or Time value.</param>
1017 /// <param name="timeValue2">An expression that specifies the DateTime, DateTimeOffset or Time for which the millisecond difference from <paramref name="timeValue1"/> should be calculated.</param>
1018 /// <returns>A new DbFunctionExpression that returns the millisecond difference between <param name="timeValue1"> and <param name="timeValue2">.</returns>
1019 /// <exception cref="ArgumentNullException"><paramref name="timeValue1"/> or <paramref name="timeValue2"/> is null.</exception>
1020 /// <exception cref="ArgumentException">No overload of the canonical 'DiffMilliseconds' function accepts arguments with the result types of <paramref name="timeValue1"/> and <paramref name="timeValue2"/>.</exception>
1021 public static DbFunctionExpression DiffMilliseconds(this DbExpression timeValue1, DbExpression timeValue2)
1023 EntityUtil.CheckArgumentNull(timeValue1, "timeValue1");
1024 EntityUtil.CheckArgumentNull(timeValue2, "timeValue2");
1025 return InvokeCanonicalFunction("DiffMilliseconds", timeValue1, timeValue2);
1029 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'DiffMicroseconds' function with the
1030 /// specified arguments, which must each have a DateTime, DateTimeOffset or Time result type. The result type of
1031 /// <paramref name="timeValue1"/> must match the result type of <paramref name="timeValue2"/>.
1032 /// The result type of the expression is Edm.Int32.
1034 /// <param name="timeValue1">An expression that specifies the first DateTime, DateTimeOffset or Time value.</param>
1035 /// <param name="timeValue2">An expression that specifies the DateTime, DateTimeOffset or Time for which the microsecond difference from <paramref name="timeValue1"/> should be calculated.</param>
1036 /// <returns>A new DbFunctionExpression that returns the microsecond difference between <param name="timeValue1"> and <param name="timeValue2">.</returns>
1037 /// <exception cref="ArgumentNullException"><paramref name="timeValue1"/> or <paramref name="timeValue2"/> is null.</exception>
1038 /// <exception cref="ArgumentException">No overload of the canonical 'DiffMicroseconds' function accepts arguments with the result types of <paramref name="timeValue1"/> and <paramref name="timeValue2"/>.</exception>
1039 public static DbFunctionExpression DiffMicroseconds(this DbExpression timeValue1, DbExpression timeValue2)
1041 EntityUtil.CheckArgumentNull(timeValue1, "timeValue1");
1042 EntityUtil.CheckArgumentNull(timeValue2, "timeValue2");
1043 return InvokeCanonicalFunction("DiffMicroseconds", timeValue1, timeValue2);
1047 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'DiffNanoseconds' function with the
1048 /// specified arguments, which must each have a DateTime, DateTimeOffset or Time result type. The result type of
1049 /// <paramref name="timeValue1"/> must match the result type of <paramref name="timeValue2"/>.
1050 /// The result type of the expression is Edm.Int32.
1052 /// <param name="timeValue1">An expression that specifies the first DateTime, DateTimeOffset or Time value.</param>
1053 /// <param name="timeValue2">An expression that specifies the DateTime, DateTimeOffset or Time for which the nanosecond difference from <paramref name="timeValue1"/> should be calculated.</param>
1054 /// <returns>A new DbFunctionExpression that returns the nanosecond difference between <param name="timeValue1"> and <param name="timeValue2">.</returns>
1055 /// <exception cref="ArgumentNullException"><paramref name="timeValue1"/> or <paramref name="timeValue2"/> is null.</exception>
1056 /// <exception cref="ArgumentException">No overload of the canonical 'DiffNanoseconds' function accepts arguments with the result types of <paramref name="timeValue1"/> and <paramref name="timeValue2"/>.</exception>
1057 public static DbFunctionExpression DiffNanoseconds(this DbExpression timeValue1, DbExpression timeValue2)
1059 EntityUtil.CheckArgumentNull(timeValue1, "timeValue1");
1060 EntityUtil.CheckArgumentNull(timeValue2, "timeValue2");
1061 return InvokeCanonicalFunction("DiffNanoseconds", timeValue1, timeValue2);
1066 #region Math functions - Floor, Ceiling, Round, Truncate, Abs, Power
1069 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Round' function with the
1070 /// specified argument, which must each have a single, double or decimal result type. The result
1071 /// type of the expression is the same as the result type of <paramref name="value"/>.
1073 /// <param name="value">An expression that specifies the numeric value to round.</param>
1074 /// <returns>A new DbFunctionExpression that rounds the specified argument to the nearest integer value.</returns>
1075 /// <exception cref="ArgumentNullException"><paramref name="value"/> is null.</exception>
1076 /// <exception cref="ArgumentException">No overload of the canonical 'Round' function accepts an argument with the result type of <paramref name="value"/>.</exception>
1077 public static DbFunctionExpression Round(this DbExpression value)
1079 EntityUtil.CheckArgumentNull(value, "value");
1080 return InvokeCanonicalFunction("Round", value);
1084 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Round' function with the
1085 /// specified arguments, which must have a single, double or decimal, and integer result types. The result
1086 /// type of the expression is the same as the result type of <paramref name="value"/>.
1088 /// <param name="value">An expression that specifies the numeric value to round.</param>
1089 /// <param name="digits">An expression that specifies the number of digits of precision to use when rounding.</param>
1090 /// <returns>A new DbFunctionExpression that rounds the specified argument to the nearest integer value, with precision as specified by <paramref name="digits"/>.</returns>
1091 /// <exception cref="ArgumentNullException"><paramref name="value"/> or <paramref name="digits"/> is null.</exception>
1092 /// <exception cref="ArgumentException">No overload of the canonical 'Round' function accepts arguments with the result types of <paramref name="value"/> and <paramref name="digits"/>.</exception>
1093 public static DbFunctionExpression Round(this DbExpression value, DbExpression digits)
1095 EntityUtil.CheckArgumentNull(value, "value");
1096 EntityUtil.CheckArgumentNull(digits, "digits");
1097 return InvokeCanonicalFunction("Round", value, digits);
1101 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Floor' function with the
1102 /// specified argument, which must each have a single, double or decimal result type. The result
1103 /// type of the expression is the same as the result type of <paramref name="value"/>.
1105 /// <param name="value">An expression that specifies the numeric value.</param>
1106 /// <returns>A new DbFunctionExpression that returns the largest integer value not greater than <paramref name="value"/>.</returns>
1107 /// <exception cref="ArgumentNullException"><paramref name="value"/> is null.</exception>
1108 /// <exception cref="ArgumentException">No overload of the canonical 'Floor' function accepts an argument with the result type of <paramref name="value"/>.</exception>
1109 public static DbFunctionExpression Floor(this DbExpression value)
1111 EntityUtil.CheckArgumentNull(value, "value");
1112 return InvokeCanonicalFunction("Floor", value);
1116 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Ceiling' function with the
1117 /// specified argument, which must each have a single, double or decimal result type. The result
1118 /// type of the expression is the same as the result type of <paramref name="value"/>.
1120 /// <param name="value">An expression that specifies the numeric value.</param>
1121 /// <returns>A new DbFunctionExpression that returns the smallest integer value not less than than <paramref name="value"/>.</returns>
1122 /// <exception cref="ArgumentNullException"><paramref name="value"/> is null.</exception>
1123 /// <exception cref="ArgumentException">No overload of the canonical 'Ceiling' function accepts an argument with the result type of <paramref name="value"/>.</exception>
1124 public static DbFunctionExpression Ceiling(this DbExpression value)
1126 EntityUtil.CheckArgumentNull(value, "value");
1127 return InvokeCanonicalFunction("Ceiling", value);
1131 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Abs' function with the
1132 /// specified argument, which must each have a numeric result type. The result
1133 /// type of the expression is the same as the result type of <paramref name="value"/>.
1135 /// <param name="value">An expression that specifies the numeric value.</param>
1136 /// <returns>A new DbFunctionExpression that returns the absolute value of <paramref name="value"/>.</returns>
1137 /// <exception cref="ArgumentNullException"><paramref name="value"/> is null.</exception>
1138 /// <exception cref="ArgumentException">No overload of the canonical 'Abs' function accepts an argument with the result type of <paramref name="value"/>.</exception>
1139 public static DbFunctionExpression Abs(this DbExpression value)
1141 EntityUtil.CheckArgumentNull(value, "value");
1142 return InvokeCanonicalFunction("Abs", value);
1146 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Truncate' function with the
1147 /// specified arguments, which must have a single, double or decimal, and integer result types. The result
1148 /// type of the expression is the same as the result type of <paramref name="value"/>.
1150 /// <param name="value">An expression that specifies the numeric value to truncate.</param>
1151 /// <param name="digits">An expression that specifies the number of digits of precision to use when truncating.</param>
1152 /// <returns>A new DbFunctionExpression that truncates the specified argument to the nearest integer value, with precision as specified by <paramref name="digits"/>.</returns>
1153 /// <exception cref="ArgumentNullException"><paramref name="value"/> <paramref name="digits"/> is null.</exception>
1154 /// <exception cref="ArgumentException">No overload of the canonical 'Truncate' function accepts arguments with the result types of <paramref name="value"/> and <paramref name="digits"/>.</exception>
1155 public static DbFunctionExpression Truncate(this DbExpression value, DbExpression digits)
1157 EntityUtil.CheckArgumentNull(value, "value");
1158 EntityUtil.CheckArgumentNull(digits, "digits");
1159 return InvokeCanonicalFunction("Truncate", value, digits);
1163 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'Power' function with the
1164 /// specified arguments, which must have numeric result types. The result type of the expression is
1165 /// the same as the result type of <paramref name="baseArgument"/>.
1167 /// <param name="baseArgument">An expression that specifies the numeric value to raise to the given power.</param>
1168 /// <param name="exponent">An expression that specifies the power to which <paramref name="baseArgument"/> should be raised.</param>
1169 /// <returns>A new DbFunctionExpression that returns the value of <paramref name="baseArgument"/> raised to the power specified by <paramref name="exponent"/>.</returns>
1170 /// <exception cref="ArgumentNullException"><paramref name="baseArgument"/> <paramref name="exponent"/> is null.</exception>
1171 /// <exception cref="ArgumentException">No overload of the canonical 'Power' function accepts arguments with the result types of <paramref name="baseArgument"/> and <paramref name="exponent"/>.</exception>
1172 public static DbFunctionExpression Power(this DbExpression baseArgument, DbExpression exponent)
1174 EntityUtil.CheckArgumentNull(baseArgument, "baseArgument");
1175 EntityUtil.CheckArgumentNull(exponent, "exponent");
1176 return InvokeCanonicalFunction("Power", baseArgument, exponent);
1181 #region Bitwise functions - And, Or, Not, Xor
1184 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'BitwiseAnd' function with the
1185 /// specified arguments, which must have the same integer numeric result type. The result type of the
1186 /// expression is this same type.
1188 /// <param name="value">An expression that specifies the first operand.</param>
1189 /// <param name="value2">An expression that specifies the second operand.</param>
1190 /// <returns>A new DbFunctionExpression that returns the value produced by performing the bitwise AND of <paramref name="value1"/> and <paramref name="value2"/>.</returns>
1191 /// <exception cref="ArgumentNullException"><paramref name="value1"/> <paramref name="value2"/> is null.</exception>
1192 /// <exception cref="ArgumentException">No overload of the canonical 'BitwiseAnd' function accepts arguments with the result types of <paramref name="value1"/> and <paramref name="value2"/>.</exception>
1193 public static DbFunctionExpression BitwiseAnd(this DbExpression value1, DbExpression value2)
1195 EntityUtil.CheckArgumentNull(value1, "value1");
1196 EntityUtil.CheckArgumentNull(value2, "value2");
1197 return InvokeCanonicalFunction("BitwiseAnd", value1, value2);
1201 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'BitwiseOr' function with the
1202 /// specified arguments, which must have the same integer numeric result type. The result type of the
1203 /// expression is this same type.
1205 /// <param name="value1">An expression that specifies the first operand.</param>
1206 /// <param name="value2">An expression that specifies the second operand.</param>
1207 /// <returns>A new DbFunctionExpression that returns the value produced by performing the bitwise OR of <paramref name="value1"/> and <paramref name="value2"/>.</returns>
1208 /// <exception cref="ArgumentNullException"><paramref name="value1"/> <paramref name="value2"/> is null.</exception>
1209 /// <exception cref="ArgumentException">No overload of the canonical 'BitwiseOr' function accepts arguments with the result types of <paramref name="value1"/> and <paramref name="value2"/>.</exception>
1210 public static DbFunctionExpression BitwiseOr(this DbExpression value1, DbExpression value2)
1212 EntityUtil.CheckArgumentNull(value1, "value1");
1213 EntityUtil.CheckArgumentNull(value2, "value2");
1214 return InvokeCanonicalFunction("BitwiseOr", value1, value2);
1218 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'BitwiseNot' function with the
1219 /// specified argument, which must have an integer numeric result type. The result type of the expression
1220 /// is this same type.
1222 /// <param name="value">An expression that specifies the first operand.</param>
1223 /// <returns>A new DbFunctionExpression that returns the value produced by performing the bitwise NOT of <paramref name="value"/>.</returns>
1224 /// <exception cref="ArgumentNullException"><paramref name="value"/> is null.</exception>
1225 /// <exception cref="ArgumentException">No overload of the canonical 'BitwiseNot' function accepts an argument with the result type of <paramref name="value"/>.</exception>
1226 public static DbFunctionExpression BitwiseNot(this DbExpression value)
1228 EntityUtil.CheckArgumentNull(value, "value");
1229 return InvokeCanonicalFunction("BitwiseNot", value);
1233 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'BitwiseXor' function with the
1234 /// specified arguments, which must have the same integer numeric result type. The result type of the
1235 /// expression is this same type.
1237 /// <param name="value1">An expression that specifies the first operand.</param>
1238 /// <param name="value2">An expression that specifies the second operand.</param>
1239 /// <returns>A new DbFunctionExpression that returns the value produced by performing the bitwise XOR (exclusive OR) of <paramref name="value1"/> and <paramref name="value2"/>.</returns>
1240 /// <exception cref="ArgumentNullException"><paramref name="value1"/> <paramref name="value2"/> is null.</exception>
1241 /// <exception cref="ArgumentException">No overload of the canonical 'BitwiseXor' function accepts arguments with the result types of <paramref name="value1"/> and <paramref name="value2"/>.</exception>
1242 public static DbFunctionExpression BitwiseXor(this DbExpression value1, DbExpression value2)
1244 EntityUtil.CheckArgumentNull(value1, "value1");
1245 EntityUtil.CheckArgumentNull(value2, "value2");
1246 return InvokeCanonicalFunction("BitwiseXor", value1, value2);
1251 #region GUID Generation - NewGuid
1254 /// Creates a <see cref="DbFunctionExpression"/> that invokes the canonical 'NewGuid' function.
1256 /// <returns>A new DbFunctionExpression that returns a new GUID value.</returns>
1257 public static DbFunctionExpression NewGuid()
1259 return InvokeCanonicalFunction("NewGuid");