LINQ:如何执行更新,如LINQ中的updateSET update(,)SELECT FROM子句?

LINQ:如何执行更新,如LINQ中的updateSET update(,)SELECT FROM子句?,linq,Linq,我想根据我读取的csv更新和插入一些记录。插入不是问题,但是如何在单个语句中更新一组数据?我不清楚如何加入他们 Update Item Set Name = t.Name From Item i, TextFile t Where i.ItemNo = t.ItemNo 对于Name=t.Name,我创建了一个私有项updateItem originalItem,Item newItem,其中存在更新逻辑 我想知道如何调用此函数并使用更改的记录执行db.SubmitChanges

我想根据我读取的csv更新和插入一些记录。插入不是问题,但是如何在单个语句中更新一组数据?我不清楚如何加入他们

Update Item
Set
  Name = t.Name
From
  Item i, TextFile t
Where
  i.ItemNo = t.ItemNo
对于Name=t.Name,我创建了一个私有项updateItem originalItem,Item newItem,其中存在更新逻辑

我想知道如何调用此函数并使用更改的记录执行db.SubmitChanges


感谢您的帮助。

我假设TextFile是从CSV文件读取的对象的内存集合,Items是数据库数据上下文中的一个表。在这种情况下,我认为如果不先将数据库中的所有项都提取到内存集合中,就无法进行实际的连接,这可能是一个代价高昂的操作。下面的示例仅将这些项及其匹配的新名称从文本文件选择到新集合中,然后遍历该集合并设置项的名称。它不会使用你的UpdateItem方法

var textFile = ...collection of objects from CSV...

var textIDs = textFile.Select( t => t.ItemNo );

using (var db = new DataContext())
{
  var toUpdate = db.Items
                   .Where( i => textIDs.Contains( i.ItemNo ) )
                   .ToList()  // <--- this will force the query
                   .Select( i => new
                    {
                        Item = i,
                        NewName = textFile.Where( t => t.ItemNo == i.ItemNo )
                                          .Single()
                                          .Name
                    });

  foreach (var item in toUpdate)
  {
      item.Item.Name = item.NewName;
  }

  db.SubmitChanges();
}

我假设TextFile是从CSV文件读取的对象的内存集合,Items是数据库数据上下文中的一个表。在这种情况下,我认为如果不先将数据库中的所有项都提取到内存集合中,就无法进行实际的连接,这可能是一个代价高昂的操作。下面的示例仅将这些项及其匹配的新名称从文本文件选择到新集合中,然后遍历该集合并设置项的名称。它不会使用你的UpdateItem方法

var textFile = ...collection of objects from CSV...

var textIDs = textFile.Select( t => t.ItemNo );

using (var db = new DataContext())
{
  var toUpdate = db.Items
                   .Where( i => textIDs.Contains( i.ItemNo ) )
                   .ToList()  // <--- this will force the query
                   .Select( i => new
                    {
                        Item = i,
                        NewName = textFile.Where( t => t.ItemNo == i.ItemNo )
                                          .Single()
                                          .Name
                    });

  foreach (var item in toUpdate)
  {
      item.Item.Name = item.NewName;
  }

  db.SubmitChanges();
}

我感谢你的帮助。确实很昂贵。var updates=from i in db.Item.WhereouterItem join t in textfile on i.ItemNo等于t.ItemNo选择new{OriginalItem=i,NewItem=t};更新updateItem.OriginalItem、item.NewItem中的foreach var项;但错误:本地序列不能用于查询运算符的LINQ到SQL实现中,除非包含运算符。非常感谢您的帮助。确实很昂贵。var updates=from i in db.Item.WhereouterItem join t in textfile on i.ItemNo等于t.ItemNo选择new{OriginalItem=i,NewItem=t};更新updateItem.OriginalItem、item.NewItem中的foreach var项;但错误:除了Contains运算符外,查询运算符的LINQ to SQL实现中不能使用局部序列