LINQ:如何在LINQ中执行更新,如UPDATE <t> SET Update(<t>,<t>)SELECT FROM子句?</t> </t> </t>

时间:2009-04-10 10:27:04

标签: linq

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

Update Item
Set
  Name = t.Name
From
  Item i, TextFile t
Where
  i.ItemNo = t.ItemNo

对于Name = t.Name,我创建了一个私有项UpdateItem(Item originalItem, Item newItem),其中存在更新逻辑。

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

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:1)

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