を使用してフィルタを追加します。私はこのような方法とクエリ持つ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;
}
OUTPUT:それは私が持っている2 CreateQueryStructure
渡すから今"(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))"
別の方法:
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句で出力を返す:
"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モデルクラスを貼り付けてください。 –