Простой ответ заключается в том, что если вы не добавите запись в базовое хранилище данных, которое запрашивает 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");