public static string SerialiseMetadataQueryExpression(MetadataQueryExpression item)
 {
     if (item != null)
     {
         string xml =
             @"<c:Criteria>"
             + MetadataSerialiser.SerialiseMetadataFilterExpression(item.Criteria) +
             @"</c:Criteria>
             <c:Properties>"
             + MetadataSerialiser.SerialiseMetadataPropertiesExpression(item.Properties)
             + @" </c:Properties>";
         return(xml);
     }
     return("");
 }
        public static void AddFilter(this MetadataQueryExpression query, MetadataFilterExpression filter)
        {
            if (filter == null)
            {
                return;
            }

            if (query.Criteria == null || query.Criteria.Conditions.Count == 0 && query.Criteria.Filters.Count == 0)
            {
                query.Criteria = filter;
            }
            else if (query.Criteria.FilterOperator == LogicalOperator.And)
            {
                query.Criteria.Filters.Add(filter);
            }
            else
            {
                query.Criteria = new MetadataFilterExpression {
                    Filters = { query.Criteria, filter }
                }
            };
        }
    }