Exemplo n.º 1
0
 private SqlLink BuildLink(SqlExpression item, MetaDataMember member, Expression source)
 {
     if (member.IsAssociation)
     {
         SqlExpression[] exprs = new SqlExpression[member.Association.ThisKey.Count];
         for (int i = 0, n = exprs.Length; i < n; i++)
         {
             MetaDataMember mm = member.Association.ThisKey[i];
             exprs[i] = sql.Member(item, mm.Member);
         }
         MetaType otherType = member.Association.OtherType;
         return(new SqlLink(new object(), otherType, member.Type, typeProvider.From(member.Type), item, member, exprs, null, source));
     }
     else
     {
         // if not association link is always based on primary key
         MetaType thisType = member.DeclaringType;
         System.Diagnostics.Debug.Assert(thisType.IsEntity);
         List <SqlExpression> exprs = new List <SqlExpression>();
         foreach (MetaDataMember mm in thisType.IdentityMembers)
         {
             exprs.Add(sql.Member(item, mm.Member));
         }
         SqlExpression expansion = sql.Member(item, member.Member);
         return(new SqlLink(new object(), thisType, member.Type, typeProvider.From(member.Type), item, member, exprs, expansion, source));
     }
 }
Exemplo n.º 2
0
        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 (this.IsTimeType(expr))
            {
                if (isClrTimeSpanType)
                {
                    // no conversion necessary
                    return(expr);
                }
                expr = ConvertToDateTime(expr);
            }

            return(UnaryConvert(clrType, typeProvider.From(clrType), expr, expr.SourceExpression));
        }