Linq обновляет другую таблицу после процесса соединения

1

Я объединил 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
                };
}
Теги:
linq
join

3 ответа

3
Лучший ответ

Хотя ваш подход немного неясен прямо сейчас (например, мы не знаем, какие объекты вы пытаетесь обновить), однако вы можете изменить свой код таким образом,

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();
}

Вместо того, чтобы выбирать выбранные свойства из каждой сущности, вы можете выбрать целую сущность. Затем вы можете обновлять каждую сущность в цикле, как я делаю выше.

1

Мне нравится обновление 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
1

Чтобы обновить объект, вам нужно будет извлечь объект из контекста, изменить значения, а затем вызвать SaveChanges() для выполнения обновления.

foreach( var n in query)
{
  var shoe = db.Shoes.Find(n.ShoeID);
  shoe.Size = webFormData.Size;
}
db.SaveChanges();
  • 1
    Это автоматически помечается как низкое качество из-за его краткости. Попробуйте добавить текст, чтобы объяснить код и как он отвечает на вопрос.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню