У меня есть следующая инструкция Linq, которая используется для извлечения списка всех строк таблицы, которые удовлетворяют конкретному условию.Неожиданное поведение предложения `Where`
var set = db.TcSet
.Where(x => x.SetName.Equals(original.SetName))
.AsEnumerable()
.Where(x => x.SetName == original.SetName))
Эта конкретная инструкция используется для редактирования всех объектов в таблице с определенным именем. Таким образом, начальное имя свойства извлекается в original
и проверяется на наличие всех других записей в базе данных, которая соответствует условию.
Выходной ток
Если у меня есть две записи с именем Play123
и редактирование одного из входа выход where query
содержит только один элемент.
Если есть запись Play123
и Play1234
, и я пытаюсь редактировать Play123
к Play1234
, выход where query
содержит два элемента: Play123
и Play1234
.
Что мне не хватает, что приводит к неожиданному поведению.
Update
var original = db.TcSet.Find(tcSet.TcSetID);
foreach (var set in db.TcSet
.Where(x => x.SetName.Equals(original.SetName))
.AsEnumerable()
.Where(x => x.SetName == original.SetName)))
{
if (set.SetName == original.SetName) // This was added again due to the unexpected behavior
{
set.ModifiedBy = User.Identity.Name;
set.ModifiedOn = DateTime.Now;
set.PhysicalUnit = tcSet.PhysicalUnit;
db.Entry(set).State = EntityState.Modified;
db.Entry(set).Property(x => x.CreatedBy).IsModified = false;
db.Entry(set).Property(x => x.CreatedOn).IsModified = false;
db.Entry(set).Property(x => x.TechnicalCharacteristicID).IsModified = false;
}
}
Теперь я решил эту проблему путем перебора всех элементов в таблице, которую я знаю, это не лучшая практика.
Рабочий код
var editlist = db.TcSet.Where(x => x.SetName == original.SetName).AsEnumerable().Where(x=>x.SetName==original.SetName).ToList();
foreach(var set in editlist)
// do save
Когда я извлекал, если состояние он работал.
Как вы отредактируете записи? –
Нам может понадобиться немного больше кода, чтобы получить лучшее представление о том, что вы пытаетесь сделать. –
Я добавлю логику контроллера Edit в код. – Vini