Как изменить функцию GetSelectStatement для генерации оператора выбора внутреннего соединения с помощью csharp? - PullRequest
0 голосов
/ 21 сентября 2019

Проблема

Как изменить функцию GetSelectStatement для генерации оператора выбора внутреннего соединения с помощью csharp?

У меня есть данные строки json следующим образом

{ 
           "Details":{ 
              "table":[ 
                 "MasterTable",
                 "FooterTable"
              ],
              "fields":{ 
                 "ItemCode":"string",
                 "Quantity":"int",
                 "Price":"decimal"

              },
              "keys":{ 
                 "BranchCode":1,
                 "Year":2019,
                 "Serial":2
              }
           }
    }

Как изменить функцию csharp GetSelectStatement, чтобы сгенерировать оператор выбора внутреннего соединения следующим образом:

public string GetSelectStatement(string JsonDataForSelect)
        {
            var root = (JObject)JsonConvert.DeserializeObject(JsonDataForSelect);
            var query = "";
            var items = root.SelectToken("Details").Children().OfType<JProperty>().ToDictionary(p => p.Name, p => p.Value);
            foreach (var item in items)
            {
                if (item.Key == "table")
                {
                    var tableName = item.Value;
                    query = string.Format("select from table {0} inner join table{1} where", tableName);
                }
                else if (item.Key == "keys")
                {
                    var key = item.Value.SelectToken("").OfType<JProperty>().ToDictionary(p => p.Name, p => p.Value);
                    var count = 0;
                    foreach (var id in key)
                    {
                        count++;
                        if (count == key.Count())
                        {
                            query += string.Format("{0} = {1}", id.Key, id.Value);
                        }
                        else
                        {
                            query += string.Format("{0} = {1} and ", id.Key, id.Value);
                        }
                    }

                }
            }
            return query;
        }

Оператор выбора:

1 Ответ

0 голосов
/ 23 сентября 2019

Вот простой способ, как показано ниже:

 public string GetSelectStatement(string JsonDataForSelect)
    {
        var root = (JObject)JsonConvert.DeserializeObject(JsonDataForSelect);
        var query = "";
        var query1 = "";
        var query2 = "";
        string[] tableName = new string[] { };
        var items = root.SelectToken("Details").Children().OfType<JProperty>().ToDictionary(p => p.Name, p => p.Value);
        foreach (var item in items)
        {
            if (item.Key == "table")
            {
                tableName = JsonConvert.DeserializeObject<string[]>(item.Value.ToString());
            }
            else if (item.Key == "fields")
            {
                var key = item.Value.SelectToken("").OfType<JProperty>().ToDictionary(p => p.Name, p => p.Value);
                var count = 0;
                foreach (var id in key)
                {
                    count++;
                    if (count == key.Count())
                    {
                        query1 += string.Format("{0}.{1}", tableName[1], id.Key);
                    }
                    else
                    {
                        query1 += string.Format("{0}.{1},", tableName[1], id.Key);
                    }
                    query = string.Format("select {0} from {1} inner join {2} on {3} where ", query1, tableName[0], tableName[1], query2);
                }
            }
            else if (item.Key == "keys")
            {
                var key = item.Value.SelectToken("").OfType<JProperty>().ToDictionary(p => p.Name, p => p.Value);
                var count = 0;
                if (query2 == "")
                {
                    foreach (var id in key)
                    {
                        count++;
                        if (count == key.Count())
                        {
                            query2 += string.Format("{0}.{1}={2}.{3}", tableName[0], id.Key, tableName[1], id.Key);
                        }
                        else
                        {
                            query2 += string.Format("{0}.{1}={2}.{3},", tableName[0], id.Key, tableName[1], id.Key);
                        }
                        query = string.Format("select {0} from {1} inner join {2} on {3} where ", query1, tableName[0], tableName[1], query2);
                    }
                }
                count = 0;
                foreach (var id in key)
                {
                    count++;
                    if (count == key.Count())
                    {
                        query += string.Format("{0}.{1}={2} ", tableName[0], id.Key, id.Value);
                    }
                    else
                    {
                        query += string.Format("{0}.{1}={2} and ", tableName[0], id.Key, id.Value);
                    }
                }
            }
        }
        return query;
    }

Результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...