Выбор SQL, где значения в Списке <строка>

Насколько я понимаю, вы вычисляете значение для C при установке r. Похоже, ваш код верен, но было бы лучше, если вы измените C на частный, поскольку вы не хотите получать к нему доступ, поскольку его значение вычисляется на основе r.

export class Circle {
  private C: number; // make C private
  private _r: number;

  set r(value: number) {
    this.C=2*3.14*value;
    this._r = value;
  }

  get r(): number {
    return this._r;
  }
}

Поскольку _r является приватным, вы не сможете получить к нему доступ вне класса, и единственный способ изменить его - использовать r.

10
задан Andrew Hare 2 March 2009 в 14:36
поделиться

8 ответов

Вы могли использовать String.Join. Попробуйте что-то вроде этого:

String query = "select * from table where RecordId in ({0});";
String formatted = String.Format(query, String.Join(",", list.ToArray()));

Как примечание стороны это не защитит Вас от Внедрения SQL - надо надеяться, этот пример укажет на Вас в правильном направлении.

12
ответ дан 3 December 2019 в 16:11
поделиться

Можно выполнить итерации по массиву и добавить параметр к SQL для каждого. Это получает Вас вокруг Внедрения SQL, но удостоверьтесь, что Вы используете StringBuilder, а не представляете конкатенацию в виде строки, поскольку Вы создаете свой SQL-оператор.

например.

StringBuilder sql = new StrignBuilder("select * from Table where ");
for  (int i = 0; i < RecordIDLis.Length; i++)
{
    if (i > 0) sql.Append (" OR ");
    sql.Append(" RecordID = @param" + i.ToString() + " ");
    IDbDataParameter param = new Param();
    param.value etc.
}
4
ответ дан 3 December 2019 в 16:11
поделиться

Linq к Sql. RecordList должен быть a List<T>, не ArrayList или IList<T>

IEnumerable<TableRow> query =
  from t in db.Table
  where RecordList.Any(r => t.RecordId == r)
  select t;

Это генерирует sql с параметрами:

SELECT *
FROM Table
WHERE RecordId in (@p0, @p1, @p2, @p3, @p4)

Linq генерирует столько параметров, сколько необходимы. Некоторые реализации базы данных ограничены в количестве параметров, которые могут быть приняты. Предел SqlServer2005 является немногим более, чем 2 000 параметров..., так не используйте список больше чем с 2 000 элементов.

7
ответ дан 3 December 2019 в 16:11
поделиться

Я только сделал что Вашу попытку сделать со списком разделенных запятой значений

Select * from Table where RecordID in (1,2,34,45,76,34,457,34)

или где результаты прибывают из отдельного выбора

Select * from Table where RecordID in (select recordId from otherTable where afieldtype=1)

Я вполне уверен, Вы не можете достигнуть того, что Вы после....

6
ответ дан 3 December 2019 в 16:11
поделиться

Можно записать табличную пользовательскую функцию, которая берет список идентификаторов и составляет таблицу, затем присоединитесь к agains результат этой функции. Эта статья Erland Sommarskog описывает, как сделать это.

Или, Вы могли использовать параметры таблицы, новые в SQL-сервере 2008 (я думаю).

Или, как Manu сказал, можно использовать XML.

Однако я совет против использования В Строке. Присоединитесь к подходу в принятом ответе, так как он похож на просьбу о Внедрении SQL.

1
ответ дан 3 December 2019 в 16:11
поделиться

При использовании динамического SQL можно отправить содержание круглых скобок как литеральный разделенный запятыми список. Иначе можно использовать переменную XML для отправки нескольких значений. См. http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm

0
ответ дан 3 December 2019 в 16:11
поделиться

Используя Linq к SQL и я принимаю Платформу Объекта, можно сделать следующее:

dataContext.Table.Where(t => RecordIDList.Contains(t.RecordID));

Будет работать с обоими Списками <> и ArrayList как они оба реализация IEnumerable.

Linq и Lambdas требуют, чтобы Вы инвертировали, Содержит метод, но он действительно работает и генерирует SQL "В ()" пункт.

0
ответ дан 3 December 2019 в 16:11
поделиться

Отметьте Linq к SQL = мертвый, Источник: http://blogs.msdn.com/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx

Платформа объекта - то, что необходимо в настоящее время использовать, если Вы хотите реализовать такую архитектуру.

Кроме того, если бы Вы используете другой запрос Select (как GordonB, предлагает) для Вашего "в" пункте, который было бы лучше использовать, "существует" вместо "в", например:

select * from tablename where exists (select id from othertablename where fieldtype=1)
-4
ответ дан 3 December 2019 в 16:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: