本文整理汇总了C#中SqlExpression类的典型用法代码示例。如果您正苦于以下问题:C# SqlExpression类的具体用法?C# SqlExpression怎么用?C# SqlExpression使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
SqlExpression类属于命名空间,在下文中一共展示了SqlExpression类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: SqlClientWhen
internal SqlClientWhen(SqlExpression match, SqlExpression value) {
// 'match' may be null when this when represents the ELSE condition.
if (value == null)
throw Error.ArgumentNull("value");
this.Match = match;
this.Value = value;
}
开发者ID:modulexcite,项目名称:LinqToSQL2,代码行数:7,代码来源:SqlClientWhen.cs
示例2: ConvertPredicateToValue
internal override SqlExpression ConvertPredicateToValue(SqlExpression predicateExpression) {
// Transform the 'Predicate' expression into a 'Bit' by forming the
// following operation:
// CASE
// WHEN predicateExpression THEN 1
// ELSE NOT(predicateExpression) THEN 0
// ELSE NULL
// END
// Possible simplification to the generated SQL would be to detect when 'predicateExpression'
// is SqlUnary(NOT) and use its operand with the literal 1 and 0 below swapped.
SqlExpression valueTrue = sql.ValueFromObject(true, false, predicateExpression.SourceExpression);
SqlExpression valueFalse = sql.ValueFromObject(false, false, predicateExpression.SourceExpression);
if (SqlExpressionNullability.CanBeNull(predicateExpression) != false) {
SqlExpression valueNull = sql.Value(valueTrue.ClrType, valueTrue.SqlType, null, false, predicateExpression.SourceExpression);
return new SqlSearchedCase(
predicateExpression.ClrType,
new SqlWhen[] {
new SqlWhen(predicateExpression, valueTrue),
new SqlWhen(new SqlUnary(SqlNodeType.Not, predicateExpression.ClrType, predicateExpression.SqlType, predicateExpression, predicateExpression.SourceExpression), valueFalse)
},
valueNull,
predicateExpression.SourceExpression
);
}
else {
return new SqlSearchedCase(
predicateExpression.ClrType,
new SqlWhen[] { new SqlWhen(predicateExpression, valueTrue) },
valueFalse,
predicateExpression.SourceExpression
);
}
}
开发者ID:nlh774,项目名称:DotNetReferenceSource,代码行数:34,代码来源:SqlBooleanizer.cs
示例3: Visit
internal override SqlNode Visit(SqlNode node) {
if (node == null)
return null;
sourceExpression = node as SqlExpression;
if (sourceExpression != null) {
Type type = sourceExpression.ClrType;
UnwrapStack unwrap = this.UnwrapSequences;
while (unwrap != null) {
if (unwrap.Unwrap) {
type = TypeSystem.GetElementType(type);
}
unwrap = unwrap.Last;
}
sourceType = type;
}
if (sourceType != null && TypeSystem.GetNonNullableType(sourceType).IsValueType) {
return node; // Value types can't also have a dynamic type.
}
if (sourceType != null && TypeSystem.HasIEnumerable(sourceType)) {
return node; // Sequences can't be polymorphic.
}
switch (node.NodeType) {
case SqlNodeType.ScalarSubSelect:
case SqlNodeType.Multiset:
case SqlNodeType.Element:
case SqlNodeType.SearchedCase:
case SqlNodeType.ClientCase:
case SqlNodeType.SimpleCase:
case SqlNodeType.Member:
case SqlNodeType.DiscriminatedType:
case SqlNodeType.New:
case SqlNodeType.FunctionCall:
case SqlNodeType.MethodCall:
case SqlNodeType.Convert: // Object identity does not survive convert. It does survive Cast.
// Dig no further.
return node;
case SqlNodeType.TypeCase:
sourceType = ((SqlTypeCase)node).RowType.Type;
return node;
case SqlNodeType.Link:
sourceType = ((SqlLink)node).RowType.Type;
return node;
case SqlNodeType.Table:
sourceType = ((SqlTable)node).RowType.Type;
return node;
case SqlNodeType.Value:
SqlValue val = (SqlValue)node;
if (val.Value != null) {
// In some cases the ClrType of a Value node may
// differ from the actual runtime type of the value.
// Therefore, we ensure here that the correct type is set.
sourceType = val.Value.GetType();
}
return node;
}
return base.Visit(node);
}
开发者ID:iskiselev,项目名称:JSIL.NetFramework,代码行数:59,代码来源:TypeSource.cs
示例4: VisitLink
internal override SqlNode VisitLink(SqlLink link) {
SqlExpression expansion = this.VisitExpression(link.Expansion);
SqlExpression[] exprs = new SqlExpression[link.KeyExpressions.Count];
for (int i = 0, n = exprs.Length; i < n; i++) {
exprs[i] = this.VisitExpression(link.KeyExpressions[i]);
}
return new SqlLink(link.Id, link.RowType, link.ClrType, link.SqlType, link.Expression, link.Member, exprs, expansion, link.SourceExpression);
}
开发者ID:iskiselev,项目名称:JSIL.NetFramework,代码行数:8,代码来源:SqlExpander.cs
示例5: Function
public IExpressionBuilder Function(ObjectName functionName, params SqlExpression[] args)
{
expression = SqlExpression.FunctionCall(functionName, args);
VerifyUnary();
return this;
}
开发者ID:deveel,项目名称:deveeldb,代码行数:8,代码来源:ExpressionBuilder.cs
示例6: IfNull
/// <summary>
/// Renders IfNull SqlExpression
/// </summary>
/// <param name="builder"></param>
/// <param name="expr"></param>
protected override void IfNull(StringBuilder builder, SqlExpression expr)
{
builder.Append("ifnull(");
Expression(builder, expr.SubExpr1);
builder.Append(", ");
Expression(builder, expr.SubExpr2);
builder.Append(")");
}
开发者ID:TargetProcess,项目名称:Tp.HelpDesk,代码行数:13,代码来源:MySqlRenderer.cs
示例7: Quantified
public IExpressionBuilder Quantified(SqlExpressionType quantifyType, Action<IExpressionBuilder> exp)
{
var builder = new ExpressionBuilder();
exp(builder);
expression = SqlExpression.Quantified(quantifyType, builder.Build());
return this;
}
开发者ID:deveel,项目名称:deveeldb,代码行数:9,代码来源:ExpressionBuilder.cs
示例8: ConvertToMax
// returns CONVERT(VARCHAR/NVARCHAR/VARBINARY(MAX), expr) if provType is one of Text, NText or Image
// otherwise just returns expr
// changed is true if CONVERT(...(MAX),...) was added
private SqlExpression ConvertToMax(SqlExpression expr, out bool changed) {
changed = false;
if (!expr.SqlType.IsLargeType)
return expr;
ProviderType newType = sql.TypeProvider.GetBestLargeType(expr.SqlType);
changed = true;
if (expr.SqlType != newType) {
return ConvertToMax(expr, newType);
}
changed = false;
return expr;
}
开发者ID:iskiselev,项目名称:JSIL.NetFramework,代码行数:15,代码来源:LongTypeConverter.cs
示例9: SetTable
public override void SetTable(SqlTable table, MemberInfo member, IEnumerable<Expression> expArgs, IEnumerable<ISqlExpression> sqlArgs)
{
var aargs = sqlArgs.ToArray();
var arr = ConvertArgs(member, aargs).ToList();
var method = (MethodInfo)member;
{
var ttype = method.GetGenericArguments()[0];
var tbl = new SqlTable(ttype);
var database = Convert(tbl.Database);
var owner = Convert(tbl.Owner);
var physicalName = Convert(tbl.PhysicalName);
var name = "";
if (database != null)
name = database + "." + (owner == null ? "." : owner + ".");
else if (owner != null)
name = owner + ".";
name += physicalName;
arr.Add(new SqlExpression(name, Precedence.Primary));
}
{
var field = ((ConstantExpression)expArgs.First()).Value;
if (field is string)
{
arr[0] = new SqlExpression(field.ToString(), Precedence.Primary);
}
else if (field is LambdaExpression)
{
var body = ((LambdaExpression)field).Body;
if (body is MemberExpression)
{
var name = ((MemberExpression)body).Member.Name;
if (name.Length > 0 && name[0] != '[')
name = "[" + name + "]";
arr[0] = new SqlExpression(name, Precedence.Primary);
}
}
}
table.SqlTableType = SqlTableType.Expression;
table.Name = "FREETEXTTABLE({6}, {2}, {3}) {1}";
table.TableArguments = arr.ToArray();
}
开发者ID:pebezo,项目名称:linq2db,代码行数:53,代码来源:FreeTextTableExpressionAttribute.cs
示例10: Expression
/// <summary>
/// Renders SqlExpression
/// </summary>
/// <param name="builder"></param>
/// <param name="expr"></param>
protected override void Expression(StringBuilder builder, SqlExpression expr)
{
SqlExpressionType type = expr.Type;
if (type == SqlExpressionType.Field)
{
QualifiedIdentifier(builder, expr.TableAlias, expr.Value.ToString());
}
else if (type == SqlExpressionType.Function)
{
Function(builder, expr.AggFunction, expr.SubExpr1);
}
else if (type == SqlExpressionType.Constant)
{
Constant(builder, (SqlConstant) expr.Value);
}
else if (type == SqlExpressionType.SubQueryText)
{
builder.AppendFormat("({0})", (string) expr.Value);
}
else if (type == SqlExpressionType.SubQueryObject)
{
builder.AppendFormat("({0})", RenderSelect((SelectQuery) expr.Value));
}
else if (type == SqlExpressionType.PseudoField)
{
builder.AppendFormat("{0}", (string) expr.Value);
}
else if (type == SqlExpressionType.Parameter)
{
builder.AppendFormat("{0}", (string) expr.Value);
}
else if (type == SqlExpressionType.LikeExpressionParameter)
{
builder.AppendFormat("'%' + {0} + '%'", (string) expr.Value);
}
else if (type == SqlExpressionType.Raw)
{
builder.AppendFormat("{0}", (string) expr.Value);
}
else if (type == SqlExpressionType.IfNull)
{
IfNull(builder, expr);
}
else if (type == SqlExpressionType.Null)
{
builder.Append("null");
}
else
{
throw new InvalidQueryException("Unkown expression type: " + type.ToString());
}
}
开发者ID:TargetProcess,项目名称:Tp.HelpDesk,代码行数:57,代码来源:HqlRenderer.cs
示例11: ConvertValueToPredicate
internal override SqlExpression ConvertValueToPredicate(SqlExpression valueExpression) {
// Transform the 'Bit' expression into a 'Predicate' by forming the
// following operation:
// OriginalExpr = 1
// Yukon and later could also handle:
// OriginalExpr = 'true'
// but Sql2000 does not support this.
return new SqlBinary(SqlNodeType.EQ,
valueExpression.ClrType, sql.TypeProvider.From(typeof(bool)),
valueExpression,
sql.Value(typeof(bool), valueExpression.SqlType, true, false, valueExpression.SourceExpression)
);
}
开发者ID:nlh774,项目名称:DotNetReferenceSource,代码行数:13,代码来源:SqlBooleanizer.cs
示例12: Binary
public IExpressionBuilder Binary(SqlExpressionType binaryType, Action<IExpressionBuilder> right)
{
if (expression == null)
throw new InvalidOperationException();
var builder = new ExpressionBuilder();
right(builder);
expression = SqlExpression.Binary(expression, binaryType, builder.Build());
VerifyUnary();
return this;
}
开发者ID:deveel,项目名称:deveeldb,代码行数:14,代码来源:ExpressionBuilder.cs
示例13: DistributeOperatorIntoCase
/// <summary>
/// Helper for VisitBinaryOperator. Builds the new case with distributed valueds.
/// </summary>
private SqlExpression DistributeOperatorIntoCase(SqlNodeType nt, SqlSimpleCase sc, SqlExpression expr) {
if (nt!=SqlNodeType.EQ && nt!=SqlNodeType.NE && nt!=SqlNodeType.EQ2V && nt!=SqlNodeType.NE2V)
throw Error.ArgumentOutOfRange("nt");
object val = Eval(expr);
List<SqlExpression> values = new List<SqlExpression>();
List<SqlExpression> matches = new List<SqlExpression>();
foreach(SqlWhen when in sc.Whens) {
matches.Add(when.Match);
object whenVal = Eval(when.Value);
bool eq = when.Value.SqlType.AreValuesEqual(whenVal, val);
values.Add(sql.ValueFromObject((nt==SqlNodeType.EQ || nt==SqlNodeType.EQ2V) == eq, false, sc.SourceExpression));
}
return this.VisitExpression(sql.Case(typeof(bool), sc.Expression, matches, values, sc.SourceExpression));
}
开发者ID:iskiselev,项目名称:JSIL.NetFramework,代码行数:17,代码来源:SqlCaseSimplifier.cs
示例14: InferName
protected string InferName(SqlExpression exp, string def)
{
if (exp == null)
return null;
SqlExpressionType nodeType = exp.NodeType;
switch (nodeType)
{
case SqlExpressionType.Field:
return ((SqlField)exp).Name;
case SqlExpressionType.Alias:
return InferName(((SqlAlias)exp).Expression, def);
case SqlExpressionType.ExprSet:
return InferName(((SqlExpressionSet)exp).First(), def);
}
return def;
}
开发者ID:radischevo,项目名称:Radischevo.Wahha,代码行数:17,代码来源:SqlDbFormatter.cs
示例15: AddParentheses
protected void AddParentheses(SqlExpression node, SqlExpression outer)
{
switch (node.NodeType)
{
case SqlExpressionType.Function:
case SqlExpressionType.TableValuedFunction:
case SqlExpressionType.Raw:
case SqlExpressionType.Parameter:
case SqlExpressionType.Constant:
case SqlExpressionType.Variable:
case SqlExpressionType.Field:
Visit(node);
break;
case SqlExpressionType.Binary:
SqlBinary binary = (SqlBinary)node;
switch (binary.Operation)
{
case SqlBinaryOperation.Add:
case SqlBinaryOperation.And:
case SqlBinaryOperation.BitAnd:
case SqlBinaryOperation.BitNot:
case SqlBinaryOperation.BitOr:
case SqlBinaryOperation.BitXor:
case SqlBinaryOperation.Multiply:
case SqlBinaryOperation.Or:
if (node.NodeType == outer.NodeType)
Visit(node);
break;
default:
_builder.Append('(');
Visit(node);
_builder.Append(')');
break;
}
break;
default:
_builder.Append('(');
Visit(node);
_builder.Append(')');
break;
}
}
开发者ID:radischevo,项目名称:Radischevo.Wahha,代码行数:42,代码来源:SqlDbFormatter.cs
示例16: ConvertTo
internal SqlExpression ConvertTo(Type clrType, SqlExpression expr) {
//
// In SQL Server 2008, the new TIME data type cannot be converted to BIGINT, or FLOAT,
// or a bunch of other SQL types.
//
if (clrType.IsGenericType && clrType.GetGenericTypeDefinition() == typeof(Nullable<>))
clrType = clrType.GetGenericArguments()[0];
bool isClrTimeSpanType = clrType == typeof(TimeSpan);
if (IsSqlTimeType(expr))
{
if (isClrTimeSpanType) {
// no conversion necessary
return expr;
} else {
expr = ConvertToDateTime(expr);
}
}
return UnaryConvert(clrType, typeProvider.From(clrType), expr, expr.SourceExpression);
}
开发者ID:krytht,项目名称:DotNetReferenceSource,代码行数:22,代码来源:SqlFactory.cs
示例17: SetTable
public override void SetTable(MappingSchema mappingSchema, SqlTable table, MemberInfo member, IEnumerable<Expression> expArgs, IEnumerable<ISqlExpression> sqlArgs)
{
var method = member as MethodInfo;
if (method == null)
throw new ArgumentNullException("member");
var paramsList = method.GetParameters().ToList();
var valuesList = expArgs.Cast<ConstantExpression>().ToList();
if (paramsList.Count != valuesList.Count)
throw new TargetParameterCountException("Invalid number of parameters");
var sqlValues = new List<ISqlExpression>();
for(var i = 0; i < paramsList.Count; i++)
{
var val = valuesList[i].Value;
if (val == null)
continue;
var p = paramsList[i];
sqlValues.Add(new SqlValue("$$" + p.Name + "$$"));
sqlValues.Add(new SqlValue(ValueToString(val)));
}
var arg = new ISqlExpression[1];
arg[0] = new SqlExpression(
String.Join(", ",
Enumerable.Range(0, sqlValues.Count)
.Select(x => "{" + x + "}")),
sqlValues.ToArray());
table.SqlTableType = SqlTableType.Expression;
table.Name = "{0}('PLACEHOLDER' = {2}) {1}";
table.TableArguments = arg.ToArray();
}
开发者ID:donners77,项目名称:linq2db,代码行数:37,代码来源:CalculationViewInputParametersExpressionAttribute.cs
示例18: BuildProjection
internal SqlExpression BuildProjection(SqlExpression item, MetaType rowType, bool allowDeferred, SqlLink link, Expression source) {
if (!rowType.HasInheritance) {
return this.BuildProjectionInternal(item, rowType, (rowType.Table != null) ? rowType.PersistentDataMembers : rowType.DataMembers, allowDeferred, link, source);
}
else {
// Build a type case that represents a switch between the various type.
List<MetaType> mappedTypes = new List<MetaType>(rowType.InheritanceTypes);
List<SqlTypeCaseWhen> whens = new List<SqlTypeCaseWhen>();
SqlTypeCaseWhen @else = null;
MetaType root = rowType.InheritanceRoot;
MetaDataMember discriminator = root.Discriminator;
Type dt = discriminator.Type;
SqlMember dm = sql.Member(item, discriminator.Member);
foreach (MetaType type in mappedTypes) {
if (type.HasInheritanceCode) {
SqlNew defaultProjection = this.BuildProjectionInternal(item, type, type.PersistentDataMembers, allowDeferred, link, source);
if (type.IsInheritanceDefault) {
@else = new SqlTypeCaseWhen(null, defaultProjection);
}
// Add an explicit case even for the default.
// Redundant results will be optimized out later.
object code = InheritanceRules.InheritanceCodeForClientCompare(type.InheritanceCode, dm.SqlType);
SqlExpression match = sql.Value(dt, sql.Default(discriminator), code, true, source);
whens.Add(new SqlTypeCaseWhen(match, defaultProjection));
}
}
if (@else == null) {
throw Error.EmptyCaseNotSupported();
}
whens.Add(@else); // Add the else at the end.
return sql.TypeCase(root.Type, root, dm, whens.ToArray(), source);
}
}
开发者ID:nlh774,项目名称:DotNetReferenceSource,代码行数:36,代码来源:Translator.cs
示例19: CoerceValueForExpression
private SqlExpression CoerceValueForExpression(SqlValue value, SqlExpression expression)
{
object clrValue = value.Value;
if (!value.ClrType.IsAssignableFrom(expression.ClrType)) {
clrValue = DBConvert.ChangeType(clrValue, expression.ClrType);
}
ProviderType newSqlType = typeProvider.ChangeTypeFamilyTo(value.SqlType, expression.SqlType);
return sql.Value(expression.ClrType, newSqlType, clrValue, value.IsClientSpecified, value.SourceExpression);
}
开发者ID:iskiselev,项目名称:JSIL.NetFramework,代码行数:9,代码来源:SqlRetyper.cs
示例20: CoerceTypes
private void CoerceTypes(ref SqlExpression arg1, ref SqlExpression arg2)
{
if (arg2.NodeType == SqlNodeType.Value) {
arg2 = CoerceValueForExpression((SqlValue)arg2, arg1);
}
else if (arg1.NodeType == SqlNodeType.Value) {
arg1 = CoerceValueForExpression((SqlValue)arg1, arg2);
}
else if (arg2.NodeType == SqlNodeType.ClientParameter && arg2.SqlType != arg1.SqlType) {
((SqlClientParameter)arg2).SetSqlType(arg1.SqlType);
}
else if (arg1.NodeType == SqlNodeType.ClientParameter && arg1.SqlType != arg2.SqlType) {
((SqlClientParameter)arg1).SetSqlType(arg2.SqlType);
}
else {
int coercionPrecedence = arg1.SqlType.ComparePrecedenceTo(arg2.SqlType);
if (coercionPrecedence > 0) {
arg2 = sql.UnaryConvert(arg1.ClrType, arg1.SqlType, arg2, arg2.SourceExpression);
}
else if (coercionPrecedence < 0) {
arg1 = sql.UnaryConvert(arg2.ClrType, arg2.SqlType, arg1, arg1.SourceExpression);
}
}
}
开发者ID:iskiselev,项目名称:JSIL.NetFramework,代码行数:24,代码来源:SqlRetyper.cs
注:本文中的SqlExpression类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论