Arhn - архитектура программирования

Выберите запрос с условием «Где» в зависимости от значений списка в asp.net

У меня есть таблица sql. У меня также есть список в моем коде Asp.Net (С#).

public static List listColumns = new List();

И listColumns содержит 1,2,3...10 случайным образом. Например, он может содержать 1, 5, 6, 9. Я хочу сделать запрос с этими условиями. Итак, если в списке есть эти значения, мой запрос должен быть:

SELECT * FROM Table WHERE id=1 or id=5 or id=6 or id=9

ListColumns может содержать разные значения и иметь разное количество. Как я могу делать этот запрос регулярно?


  • это то, что ((System.Web.UI.MobileControls.List)listColumns).ListItem.Value может иметь строковое значение с разделенными запятыми типами int? Пожалуйста, покажите, как объект listColumns содержит эти случайные целые числа. 20.10.2014
  • Они струны. Я заполняю их: list.Items.Add(s); 20.10.2014
  • Но пользователь может выбрать только один элемент за раз или это множественный выбор? Можете ли вы показать нам еще немного кода? 20.10.2014
  • список.Элементы.Очистить(); строковые значения = DropDownList4.SelectedValue; строка [] слова = значения. Разделить (','); foreach (строка s словами) if (s != && s != string.Empty && s != null) list.Items.Add(s); 20.10.2014
  • Список заполняется тем, что выбрано из выпадающего списка. Пользователь может выбрать что угодно из выпадающего списка. В раскрывающемся списке есть такие значения: 1,2,6,9, 1,5,6 или 1,2,3,4,5,6,7,8,9. и т. д. 20.10.2014
  • Хорошо, изменил мой ответ, пожалуйста, подтвердите мои предположения. 21.10.2014

Ответы:


1

Вот решение без цикла for, но, к сожалению, и без параметризованного оператора SQL:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

public class test {
  public static void Main(string[] args)
  {
    //List<int> listColumns = new List<int>(){ 1, 5, 6, 9};
    System.Collections.Generic.List<int> listColumns = new System.Collections.Generic.List<int>(){ 1, 5, 6, 9};
    string s = String.Join(", ", listColumns.Select(x => x.ToString()));

    string sql = String.Format("SELECT * FROM Table WHERE ID IN ({0})", s);
    Console.WriteLine(sql);
  }
}

Обратите внимание, что использование select * считается плохой практикой.

изменить Вот новый код, потому что ваш список имеет тип System.Web.UI.MobileControls.List

string sql = String.Format("SELECT * FROM Table WHERE ID IN ({0})", 
                 listColumns.ListItem.Value);

edit 2 Я взял код из вашего комментария:

list.Items.Clear(); 
string values = DropDownList4.SelectedValue; 
string[] words = values.Split(','); 

foreach (string s in words) 
    if (s != "" && s != string.Empty && s != null)     
        list.Items.Add(s);

Я предполагаю, что у вас есть это в раскрывающемся списке измененных событий или что-то в этом роде? и в вашем раскрывающемся списке есть строка типа «1,5,6,9» в значении. Если все мои предположения верны, вы можете использовать:

System.Collections.Generic.List<int> selectedValues = new     System.Collections.Generic.List<int>();

foreach (string s in words)
    if (!String.IsNullOrWhiteSpace(s))
        selectedValues.Add(Convert.ToInt32(s));
string ids = String.Join(", ", selectedValues.Select(x => x.ToString()));
string sql = String.Format("SELECT * FROM Table WHERE ID IN ({0})", ids);
20.10.2014
  • Я получаю сообщение об ошибке: Ошибка 1 «System.Web.UI.MobileControls.List» не содержит определения для «Select» и метода расширения «Select», принимающего первый аргумент типа «System.Web.UI.MobileControls.List». ' может быть найден (вам не хватает директивы using или ссылки на сборку?) 20.10.2014
  • Эхх, объект списка, который я использовал, был не типа MobileControls, а типа System.Collections.Generic.List msdn.microsoft.com/en-us/library/6sh2ey19%28v=vs.110%29.aspx 20.10.2014
  • пс. msdn говорит: The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231 msdn.microsoft.com/en-us/library/ 20.10.2014

  • 2
     //assume a list of int value name listColumns
      var listColumns = new List<int>() { 1, 5, 9 };
      var sb = new StringBuilder();
      sb.Append("SELECT * FROM Table");
    
       for (int i = 0; i < listColumns.Count; i++)
       {
           if (i == 0)
              {
                 sb.Append(" where ");
                 sb.Append(" id=" + listColumns[i]);
              }
            else
                 sb.Append(" or id=" + listColumns[i]);
        }
       Console.Write(sb.ToString());
    

    передать переменную запроса в sqlcommand

    20.10.2014
  • пожалуйста, используйте StringBuilder для конкатенации строк в цикле, а во-вторых, я бы предпочел использовать параметры при построении оператора SQL. 20.10.2014

  • 3

    Linq-to-SQL:

    var listColumns = new List<int>() { 1, 5, 6, 9 };
    db.Table.Where(x => listColumns.Distinct().Contains(x.id)).ToString();
    

    Сгенерированный SQL:

    SELECT
        [Extent1].[id] AS [id],
    FROM [Table] AS [Extent1]
    WHERE [Extent1].[id] IN (1, 5, 6, 9)
    

    ИЗМЕНИТЬ

    Подход, который дает параметризованный SQL (не то, чтобы это было так полезно, если количество параметров постоянно меняется):

    listColumns.Distinct().Aggregate(db.Table, (current, c) => current.Where(x => c == x.id)).ToString();
    
    18.02.2015
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..