Обновить со значением из запроса на выборку в Linq To SQL - PullRequest
0 голосов
/ 12 октября 2010
Update TableToBeUpdated
Set ColumnNameId = (Select MasterColumnId 
                    from MasterTable where Id = @Id)
Where ForeingKeyId = @Id
   AND AnotherColumn = @AnotherColumn

Как достичь выше с одним оператором выбора и оператором обновления с подзапросом?

В настоящее время я думаю только об этом.

  //First Select statement
  var tableTBU = (from t in MsDataContext.TableToBeUpdated 
           where t.ForeingKeyId == <valueFromVariable>
           select t ).SingleOrDefault();

  //Second select statement
  var masterIdValue = (from m in MsDataContext.MasterTable 
                where m.Id == <valueFromVariable>
                select mod.MasterColumnId ).SingleOrDefault();


  tableTBU.ColumnNameId = masterIdValue ;
  tableTBU.SomeOtherColumn = "dkjsdlfs";
  //Some more things to be updated.

  //UpdateStatement
  MsDataContext.SubmitChanges();

1 Ответ

2 голосов
/ 12 октября 2010

LINQ-to-SQL работает лучше всего, если вы разрешаете механизму LINQ управлять ключами (я предполагаю, что соотношение между MasterTable и TableToBeUpdated является взаимно-однозначным):

using (DataContext dc = new DataContext())
{
    var objectToUpdate = dc.MasterTable.Single(a => a.Id == id).TableToBeUpdated;

    objectToUpdate.SomeOtherColumn = "dkjsdlfs";
    dc.SubmitChanges();
}

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

UPDATE:

Поскольку у вас нет связи с внешним ключом, вам необходимо связать таблицы вручную. На основании приведенного выше оператора SQL:

using (DataContext dc = new DataContext())
{
    var objectToUpdate = dc.TableToBeUpdated
        .Single(b => b.ForeignKeyId.Contains(dc.MasterTable.Single(a => a.Id == id).Id)
            && b.AnotherColumn == anotherColumn);

    objectToUpdate.SomeOtherColumn = "dkjsdlfs";
    dc.SubmitChanges();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...