Ejemplo n.º 1
0
 /// <summary>
 /// Adds a new property value to this object
 /// </summary>
 /// <param name="type">The type of the property to add</param>
 /// <param name="value">The value of the property</param>
 /// <param name="lang">OPTIONAL: The language code of the literal value. This parameter is ignored if <paramref name="value"/> is an <see cref="IDataObject"/></param>
 /// <returns>This IDataOjbect to allow chained calls</returns>
 public IDataObject AddProperty(IDataObject type, object value, string lang = null)
 {
     if (value is IDataObject)
     {
         AddDataObjectProperty(type, value as IDataObject);
     }
     else if (value is Uri)
     {
         AddDataObjectProperty(type, _store.MakeDataObject(value.ToString()));
     }
     else
     {
         if (type == null)
         {
             throw new ArgumentNullException("type");
         }
         if (value == null)
         {
             throw new ArgumentNullException("value");
         }
         string dataType  = RdfDatatypes.GetRdfDatatype(value.GetType());
         string litString = RdfDatatypes.GetLiteralString(value);
         AddLiteralProperty(type, litString, dataType, lang ?? RdfDatatypes.GetLiteralLanguageTag(value));
     }
     return(this);
 }
        protected override Expression  VisitExtensionExpression(ExtensionExpression expression)
#endif
        {
            if (expression is SelectIdentifierVariableNameExpression)
            {
                var siv = expression as SelectIdentifierVariableNameExpression;
                var v   = _values[siv.Name].ToString();
                if (!String.IsNullOrEmpty(siv.IdentifierPrefix) && v.StartsWith(siv.IdentifierPrefix))
                {
                    v = v.Substring(siv.IdentifierPrefix.Length);
                }
                if (siv.Type.IsInstanceOfType(v))
                {
                    return(Expression.Constant(v, siv.Type));
                }
                var converted = _converter(v, RdfDatatypes.GetLiteralLanguageTag(_values[siv.Name]), siv.Type);
                return(Expression.Constant(converted, siv.Type));
            }
            if (expression is SelectVariableNameExpression)
            {
                var svn = expression as SelectVariableNameExpression;
                var v   = _values[svn.Name];
                if (svn.Type.IsInstanceOfType(v))
                {
                    return(Expression.Constant(v, svn.Type));
                }
                var converted = _converter(v.ToString(), RdfDatatypes.GetLiteralLanguageTag(v), svn.Type);
                return(Expression.Constant(converted, svn.Type));
            }
            return(expression);
        }
 protected override Expression VisitMemberExpression(MemberExpression expression)
 {
     if (expression.Expression is SelectVariableNameExpression)
     {
         // Extracting a value from a resource that should be in the _values dictionary
         var svn    = expression.Expression as SelectVariableNameExpression;
         var parent = _converter(_values[svn.Name].ToString(), RdfDatatypes.GetLiteralLanguageTag(_values[svn.Name]), svn.Type);
         if (expression.Member is PropertyInfo)
         {
             var property = expression.Member as PropertyInfo;
             var value    = property.GetValue(parent, null);
             return(Expression.Constant(value));
         }
     }
     return(base.VisitMemberExpression(expression));
 }