/
DbFunctionExpression.cs
74 lines (65 loc) · 2.69 KB
/
DbFunctionExpression.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
namespace DevZest.Data.Primitives
{
/// <summary>
/// Represents function call in database expression.
/// </summary>
public sealed class DbFunctionExpression : DbExpression
{
private static readonly DbExpression[] s_emptyParamList = new DbExpression[0];
/// <summary>
/// Initializes a new instance of <see cref="DbFunctionExpression"/> class.
/// </summary>
/// <param name="dataType">The data type.</param>
/// <param name="functionKey">The function key.</param>
public DbFunctionExpression(Type dataType, FunctionKey functionKey)
: this(dataType, functionKey, s_emptyParamList)
{
}
/// <summary>
/// Initializes a new instance of <see cref="DbFunctionExpression"/> class.
/// </summary>
/// <param name="dataType">The data type.</param>
/// <param name="functionKey">The function key.</param>
/// <param name="paramList">The parameter list.</param>
public DbFunctionExpression(Type dataType, FunctionKey functionKey, params DbExpression[] paramList)
: this(dataType, functionKey, (IList<DbExpression>)paramList)
{
}
/// <summary>
/// Initializes a new instance of <see cref="DbFunctionExpression"/> class.
/// </summary>
/// <param name="dataType">The data type.</param>
/// <param name="functionKey">The function key.</param>
/// <param name="paramList">The parameter list.</param>
public DbFunctionExpression(Type dataType, FunctionKey functionKey, IList<DbExpression> paramList)
: base(dataType)
{
functionKey.VerifyNotNull(nameof(functionKey));
paramList.VerifyNotNull(nameof(paramList));
FunctionKey = functionKey;
var readonlyCollection = paramList as ReadOnlyCollection<DbExpression>;
ParamList = readonlyCollection != null ? readonlyCollection : new ReadOnlyCollection<DbExpression>(paramList);
}
/// <summary>
/// Gets the function key.
/// </summary>
public FunctionKey FunctionKey { get; private set; }
/// <summary>
/// Gets the parameter list.
/// </summary>
public ReadOnlyCollection<DbExpression> ParamList { get; private set; }
/// <inheritdoc />
public override void Accept(DbExpressionVisitor visitor)
{
visitor.Visit(this);
}
/// <inheritdoc />
public override T Accept<T>(DbExpressionVisitor<T> visitor)
{
return visitor.Visit(this);
}
}
}