コード例 #1
0
 FilterDefinition <T> GenerateFilterConditionByType(Type type, PropertySearchExpression propertyExpression)
 {
     if (type == typeof(bool) || type == typeof(bool?))
     {
         return(ToDocumentFilter(propertyExpression.Operator, propertyExpression.Property, Convert.ToBoolean(propertyExpression.Value)));
     }
     if (type == typeof(int) || type == typeof(int?))
     {
         return(ToDocumentFilter <int>(propertyExpression.Operator, propertyExpression.Property, Convert.ToInt32(propertyExpression.Value)));
     }
     if (type == typeof(DateTime) || type == typeof(DateTime?))
     {
         return(ToDocumentFilter(propertyExpression.Operator, propertyExpression.Property, DateTime.Parse(propertyExpression.Value)));
     }
     else
     {
         return(ToDocumentFilter(propertyExpression.Operator, propertyExpression.Property, propertyExpression.Value));
     }
 }
コード例 #2
0
        FilterDefinition <T> GetSearchQuery(SearchExpression searchExpression)
        {
            try
            {
                if (searchExpression == null)
                {
                    return(FilterDefinition <T> .Empty);
                }

                if (searchExpression is PropertySearchExpression)
                {
                    var builder = Builders <T> .Filter;
                    // This is necessary to match properties of the format ProcessITTOs.ITTOId.
                    //ProcessITTOs is the main property but MongoDB filter allows projection into properties of objects or arrays.
                    string       property = (searchExpression as PropertySearchExpression).Property.Split('.')[0].Trim();
                    PropertyInfo info     = typeof(T).GetProperties().FirstOrDefault(p => p.Name.Trim() == property);
                    if (info != null)
                    {
                        PropertySearchExpression propertySearchExpression = searchExpression as PropertySearchExpression;
                        propertySearchExpression.Property = propertySearchExpression.Property?.Trim().ToLower() == "id" ? "_id" : propertySearchExpression.Property;
                        return(GenerateFilterConditionByType(info.PropertyType, propertySearchExpression));
                    }
                    return(FilterDefinition <T> .Empty);
                }
                else
                {
                    var expression = searchExpression as BinarySearchExpression <T>;
                    return(ToDocumentBinary(GetSearchQuery(expression.LeftSearch),
                                            expression.BinaryOperator,
                                            GetSearchQuery(expression.RightSearch)));
                }
            }
            catch (Exception ex)
            {
                return(FilterDefinition <T> .Empty);
            }
        }