Я объединил 3 из моих таблиц, используя linq join. После этого я хочу обновить эту таблицу, используя данные, которые я получаю из webform. Как я могу это сделать? Моя реализация ниже
public void updateShoes(Shoe shoe)
{
var query = from b in db.BrandTbls.AsQueryable()
join m in db.ShoeModelTbls on b.BrandID equals m.BrandID
join s in db.ShoeTbls on m.ModelID equals s.ModelID
where shoe.ShoeID == s.ShoeID
orderby m.ModelName
select new
{
s.ShoeID,
s.Size,
s.PrimaryColor,
s.SecondaryColor,
s.Quantity,
m.ModelName,
m.Price,
b.BrandName
};
}
Хотя ваш подход немного неясен прямо сейчас (например, мы не знаем, какие объекты вы пытаетесь обновить), однако вы можете изменить свой код таким образом,
public void updateShoes(Shoe shoe)
{
var query = from b in db.BrandTbls.AsQueryable()
join m in db.ShoeModelTbls on b.BrandID equals m.BrandID
join s in db.ShoeTbls on m.ModelID equals s.ModelID
where shoe.ShoeID == s.ShoeID
orderby m.ModelName
select new
{
Shoe = shoe, Brand = b, Model = m
};
foreach(var o in query)
{
o.Shoe.ColorName = "Black";
o.Brand.BrandName = "New Branding";
o.Model.ModelName = "Something else";
}
db.SaveChanges();
}
Вместо того, чтобы выбирать выбранные свойства из каждой сущности, вы можете выбрать целую сущность. Затем вы можете обновлять каждую сущность в цикле, как я делаю выше.
Мне нравится обновление linq all-in-one. Особенно, если мне нужно присоединиться к существующему списку объектов.
var UpdQuery = (from b in db.BrandTbls
join m in db.ShoeModelTbls on b.BrandID equals m.BrandID
join s in db.ShoeTbls on m.ModelID equals s.ModelID
where shoe.ShoeID == s.ShoeID
orderby m.ModelName
select new { b, m, s }
// now for the update portion of the query
).Select(result =>
{
result.s.ShoeID = shoe.ID;
result.s.Size = shoe.Size;
result.s.PrimaryColor = shoe.PrimaryColor;
result.s.SecondaryColor = shoe.SecondaryColor;
result.s.Quantity = shoe.Quantity;
result.m.ModelName = shoe.ModelName;
result.m.Price = shoe.Price;
result.b.BrandName = shoe.BrandName;
return result; // this is important
}).ToList(); // tolist actually runs the query to update the objects
db.SaveChanges(); // write changes back to DB
Чтобы обновить объект, вам нужно будет извлечь объект из контекста, изменить значения, а затем вызвать SaveChanges() для выполнения обновления.
foreach( var n in query)
{
var shoe = db.Shoes.Find(n.ShoeID);
shoe.Size = webFormData.Size;
}
db.SaveChanges();