У меня есть метод и запрос, как это:Добавить фильтр с помощью XML
public static string GetChartEnergy(string initDate, string endDate, string type)
{
structure.Add(initDate.CreateQueryStructure(endDate, true, null, "convert(datetime,'15/' + CONVERT(varchar(10), k.Month) + '/' + CONVERT(varchar(10), k.Year), 103)", null, false));
structure.Add(type.CreateQueryStructure(string.Empty, false, "CASE WHEN m.Type = 1 THEN 'Agua' ELSE CASE WHEN m.Type = 2 THEN 'Luz' ELSE 'Gas' END END AS Type", " m.type", "m.Type", false));
}
CreateQueryStructure это одна:
public static QueryStructure CreateQueryStructure(this String value, string endDate, bool isDate,
string columnName, string whereName, string groupByName, bool isNullField)
{
QueryStructure structure = new QueryStructure();
if (!string.IsNullOrEmpty(value))
{
if (value != ",")
{
if (isDate)
{
//obtiene la estructura para un filtro entre fechas
structure.ColumnSelect = columnName;
structure.ColumnGroupBy = groupByName;
structure.ColumnWhere = string.Format("({0} BETWEEN convert(datetime,\'{1}\', 103) and convert(datetime,\'{2}\', 103))", whereName, value.Remove(value.Length - 1), endDate.Remove(value.Length - 1));
structure.Values = null;
structure.Operator = Operator.Nothing;
}
else
{
if (isNullField)
{
//obtiene la estructura de un filtro por un campo que es null o no
if (value.Remove(value.Length - 1) != "-1")
{
structure.ColumnWhere = string.Format("{0} IS{1} NULL", whereName,
value.Remove(value.Length - 1) == "0"
? " NOT" :
string.Empty);
structure.Values = null;
structure.Operator = Operator.And;
}
}
else
{
//obtiene la estructura de un campo aplicando la regla IN seleccionando
//el campo a mostrar y el campo en groupBy
structure.ColumnSelect = columnName;
structure.ColumnGroupBy = groupByName;
structure.ColumnWhere = whereName;
structure.Values = value.Remove(value.Length - 1);
structure.Operator = Operator.And;
}
}
}
}
return structure;
}
ВЫВОД: "(convert(datetime,'15/' + CONVERT(varchar(10), k.Month) + '/' + CONVERT(varchar(10), k.Year), 103) BETWEEN convert(datetime,'01/01/2014', 103) and convert(datetime,'31/10/2016', 103))"
Теперь, когда он проходит от двух CreateQueryStructure
у меня есть другой метод:
public static string GetChartInfo(List<QueryStructure> queryStructure, string procedureName)
{
var queryWhere = queryStructure.GetWhere();
}
Так что теперь переходим к GetWhere
:
public static string GetWhere(this List<QueryStructure> filters)
{
string result = string.Empty;
if (filters != null && filters.Count > 0)
{
if (filters.Select(x => x.ColumnWhere).Any())
{
result += "WHERE ";
foreach (var filter in filters)
{
if (filter.Operator != Operator.Nothing)
{
result += " " + filter.Operator.ToString() + " ";
}
if (!string.IsNullOrEmpty(filter.Values))
{
result += filter.ColumnWhere + " IN (";
result += filter.Values;
result += ") ";
}
else
{
result += filter.ColumnWhere;
}
}
}
}
return result;
}
И, наконец, вернуть выход с тем, где пункт:
"WHERE (convert(datetime,'15/' + CONVERT(varchar(10), k.Month) + '/' + CONVERT(varchar(10), k.Year), 103) BETWEEN convert(datetime,'01/01/2014', 103) and convert(datetime,'31/10/2016', 103)) And m.type IN (2) "
И я хочу изменить, где положение, чтобы получить только пункты CurrentUser, так что я получаю CurrentUser в методе отправки параметров из контроллера, как:
public static string GetChartEnergy(string initDate, string endDate, string type, int currentUser) //there I have currentUser
Теперь, как я могу добавить этот фильтр:
structure.Add(initDate.CreateQueryStructure(endDate, true, null, "convert(datetime,'15/' + CONVERT(varchar(10), k.Month) + '/' + CONVERT(varchar(10), k.Year), 103)", null, false));
в LINQ Мне просто нужно, чтобы сделать некоторые, как x => x.user == currentUser
но в XML я не знаю, как, может ли один помочь мне ?. Отношения
Обновление: Запрос Структура Класс:
public class QueryStructure
{
public string ColumnGroupBy { get; set; }
public string ColumnSelect { get; set; }
public string ColumnWhere { get; set; }
public Operator Operator { get; set; }
public string Values { get; set; }
}
Не могли бы вы уточнить, что представляет собой ваш ввод и вывод указанной функции, и будет полезно, если вы введете класс QueryStructure. –
Я реструктурирую свой вопрос, чтобы быть более понятным @DirtyDeveloper – Dawin
вы можете вставить класс модели QueryStructure, а также –