Как я добавляю новую запись на переменную IQueryable?

Используя эту функцию PHP mysql_escape_string(), вы можете быстро получить хорошую профилактику.

Например:

SELECT * FROM users WHERE name = '".mysql_escape_string($name_from_html_form)."'

mysql_escape_string - Сбрасывает строку для использования в mysql_query

Для большей профилактики вы можете добавить в конце ...

wHERE 1=1   or  LIMIT 1

Наконец вы получаете:

SELECT * FROM users WHERE name = '".mysql_escape_string($name_from_html_form)."' LIMIT 1
28
задан Dan Beaulieu 11 August 2015 в 14:31
поделиться

5 ответов

Вы хотите добавить его к базе данных, или только к списку результатов, которые будут использовать другие вещи как привязка данных?

, Если это - первый, необходимо будет использовать нормальное, добавляет операция для любого вида LINQ, который Вы используете, но к представлению таблицы, а не IQueryable. Запросы только считывают данные.

, Если это - последний, используйте Счетный. Concat для конкатенации существующей последовательности (IQueryable) с новым, содержащим дополнительные записи (массив сделал бы прекрасный здесь, или список), и, использует результат для привязки и т.д. Вероятно, стоит использовать AsEnumerable () сначала, чтобы удостовериться, что Счетный используется вместо Queryable. Например:

IQueryable<string> names = [...];
names = names.AsEnumerable().Concat(new[] { "(None)", "(Add new)" });
38
ответ дан Jon Skeet 28 November 2019 в 02:57
поделиться

Необходимо сначала преобразовать его для Списка;

IQueryable<int> foo = new SomeQueryable<int<();
List<int> list = foo.ToList();
list.Add(5);

или при помощи РЕДАКТИРОВАНИЯ Concat

IQueryable<int> foo = new SomeQueryable<int<();
foo = foo.Concat(new int[]{5});

: уверенный необходимо повторно присвоить нечто.

14
ответ дан Ali Ersöz 28 November 2019 в 02:57
поделиться

Простой ответ - то, что, если Вы не добавляете запись на базовое хранилище данных, которое запрашивает Iqueryable, Вы не можете добавлять новую запись в IQueryable. Таким образом, при использовании LinqToSql затем, необходимо было бы добавить строку в таблицу, которую IQueryable запрашивал для "добавления" строки в IQueryable.

Помнят, что IQueryable не является набором результатов, это - запрос. Пока Вы не будете использовать что-то как.ToList (), IQueryable не оценит набор результатов и что еще более важно, IQueryable не держится за тот набор результатов. Это создает список и помещает результаты в во вместо этого. Таким образом, это означает, что при вызове ToList () на Iqueryable дважды он уйдет и запросит базу данных дважды. Это не заботится, что могло бы быть неэффективно.

Так, при рассмотрении примеров, которые другие использовали выше, простое изменение AsEnumerable () к ToList (), скорее всего, решит проблемы.

Что-то как:

dcDataContext db = new dcDataContext();
var query = from c in db.tblSexes
              select new { c.SexCode, c.SexName };

var results = query.ToList().Concat(new[] { new { SexCode = -1, SexName = "Please select your Gender" } });

//or even better now that it's a list
var results = query.ToList().Add(new { SexCode = -1, SexName = "Please select your Gender" });

SelectList sliSex = new SelectList(results, "SexCode", "SexName");
5
ответ дан Jero 28 November 2019 в 02:57
поделиться

Поскольку результатами является IQueryable, необходимо бросить к нему

  dcDataContext db = new dcDataContext();
var results = from c in db.tblSexes
              select new { c.SexCode, c.SexName };
results = results.AsEnumerable().Concat(new[] { new { SexCode = -1, SexName = "Please select your Gender"} }).AsQueryable();
SelectList sliSex = new SelectList(results, "SexCode", "SexName");

Или без любого кастинга

результаты = результаты. Объединение (новый [] {новый {SexCode =-1, SexName = "Выберите свой Пол"}})

0
ответ дан Dincer Uyav 28 November 2019 в 02:57
поделиться

Явно свойства набора для анонимных типов. Попробуйте Это:

dcDataContext db = new dcDataContext();
var results = from c in db.tblSexes
              select new { c.SexCode, c.SexName };
results = results.AsEnumerable().Concat(new[] { new { SexCode = -1, SexName = "Please select your Gender"} });
SelectList sliSex = new SelectList(results, "SexCode", "SexName");

Редактирование: необходимо указать на точные типы Вас свойства. Я имею в виду, является ли это интервал, необходимо указать, что это. Я предполагаю, что SexCode является 'длинным', и значением по умолчанию-1 'интервал'. Если Вы бросите-1 к длинному (или тип SexCode), то проблема будет решена.

Вот точное решение, если тип SexCode длинен.

dcDataContext db = new dcDataContext();
var results = from c in db.tblSexes
              select new { c.SexCode, c.SexName };
results = results.Concat(new[] { new { SexCode = -1L, SexName = "Please select your Gender"} });
SelectList sliSex = new SelectList(results, "SexCode", "SexName");
0
ответ дан Ali Ersöz 28 November 2019 в 02:57
поделиться
Другие вопросы по тегам:

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