コード例 #1
0
ファイル: Filter.cs プロジェクト: James-McK/A2-Project
        public string GetFilterText()
        {
            string toReturn = "";

            string filterCase = cbxFilterType.SelectedItem.ToString();

            if (filterCase == "By Value:")
            {
                ComboBox cbxValueFilterType = filterPanel.Children.OfType <ComboBox>().Where(cbx => cbx.Name == "cbxValueFilterType").First();
                string   colRef;
                // If a specific column is selected
                if (currentColumn is not null)
                {
                    colRef = $"[{currentColumn.TableName}].[{currentColumn.Name}]";
                    string   type   = currentColumn.Constraints.Type;
                    string[] values = new string[textBoxes.Length];
                    for (int i = 0; i < textBoxes.Length; i++)
                    {
                        string str = textBoxes[i].Text;
                        values[i] = type switch
                        {
                            "int" => $"{int.Parse(str)}",
                            "varchar" => $"'{str}'",
                            "date" => $"'{DateTime.Parse(str):yyyy-MM-dd}'",
                            "time" => $"'{TimeSpan.Parse(str):hh\\:mm}'",
                            "decimal" => $"{double.Parse(str)}",
                            "bit" => $"{(bool.Parse(str) ? "1" : "0")}",
                            _ => throw new NotImplementedException(),
                        };
                    }

                    toReturn = (cbxValueFilterType.SelectedItem.ToString()) switch
                    {
                        "Contains" => $"Lower({colRef}) LIKE Lower('%{textBoxes[0].Text}%')",
                        "Equal To" => $"{colRef} = {values[0]}",
                        "Between" => $"{colRef} BETWEEN {values[0]} AND {values[1]}",
                        "Less Than" => $"{colRef} < {values[0]}",
                        "More Than" => $"{colRef} > {values[0]}",
                        _ => throw new NotImplementedException(),
                    };
                }
                else
                {
                    if (textBoxes[0].Text == "")
                    {
                        return("");
                    }
                    toReturn = "(";

                    int countAdded = 0;

                    for (int i = 0; i < columns.Length; i++)
                    {
                        string toAdd = "";

                        string type = columns[i].Constraints.Type;

                        string text = textBoxes[0].Text;

                        colRef = $"[{columns[i].TableName}].[{columns[i].Name}]";
                        switch (cbxValueFilterType.SelectedItem.ToString())
                        {
                        case "Contains":
                            switch (type)
                            {
                            case "varchar": toAdd = $"Lower({colRef}) LIKE Lower('%{text}%')"; break;

                            case "int":
                                if (int.TryParse(text, out int intRes))
                                {
                                    toAdd = $"{colRef} = {intRes}";
                                }
                                break;

                            case "decimal":
                                if (double.TryParse(text, out double doubleRes))
                                {
                                    toAdd = $"{colRef} = {doubleRes}";
                                }
                                break;

                            case "date":
                                if (DateTime.TryParse(text, out DateTime dRes))
                                {
                                    toAdd = $"{colRef} = '{dRes.Date:yyyy-MM-yy}'";
                                }
                                break;

                            case "time":
                                if (TimeSpan.TryParse(text, out TimeSpan timeSpan))
                                {
                                    toAdd = $"{colRef} = '{timeSpan:hh\\:mm}'";
                                }
                                break;

                            case "bit":
                                if (text.ToLower() == "true" || text.ToLower() == "false")
                                {
                                    toAdd = $"{colRef} = {bool.Parse(text)}";
                                }
                                break;

                            default: throw new NotImplementedException();
                            }
                            break;

                        case "Equal To":
                            switch (type)
                            {
                            case "varchar": toAdd = $"{colRef} = '{text}'"; break;

                            case "int":
                                if (int.TryParse(text, out int intRes))
                                {
                                    toAdd = $"{colRef} = {intRes}";
                                }
                                break;

                            case "decimal":
                                if (double.TryParse(text, out double doubleRes))
                                {
                                    toAdd = $"{colRef} = {doubleRes}";
                                }
                                break;

                            case "date":
                                if (DateTime.TryParse(text, out DateTime dRes))
                                {
                                    toAdd = $"{colRef} = '{dRes.Date:yyyy-MM-yy}'";
                                }
                                break;

                            case "time":
                                if (TimeSpan.TryParse(text, out TimeSpan timeSpan))
                                {
                                    toAdd = $"{colRef} = '{timeSpan:hh\\:mm}'";
                                }
                                break;

                            case "bit":
                                if (text.ToLower() == "true" || text.ToLower() == "false")
                                {
                                    toAdd = $"{colRef} = {bool.Parse(text)}";
                                }
                                break;

                            default: throw new NotImplementedException();
                            }
                            break;

                        default: throw new NotImplementedException();
                        }

                        if (toAdd != "")
                        {
                            if (countAdded != 0)
                            {
                                toReturn += " OR ";
                            }
                            toReturn += toAdd;
                            countAdded++;
                        }

                        if (i == columns.Length - 1)
                        {
                            toReturn += ")";
                        }
                    }
                }
            }
            else if (filterCase == "By Reference:")
            {
                FilterManager filterManager = filterPanel.Children.OfType <FilterManager>().FirstOrDefault();
                toReturn = filterManager.GetFilterText();
            }
            if (toReturn == "()")
            {
                return("");
            }
            return(toReturn);
        }