CData ADO.NET Provider for Excel Online 2019J - Online Help

LINQ 更新

CData ADO.NET Provider for Excel Online 2019J - Build 19.0.7354

次のセクションは、LINQ を使用してExcel Online オブジェクトを更新するいくつかの方法を示します。

LINQ to Entities でのExcel Online オブジェクトの更新

次の例は、LINQ クエリ構文を使用して更新するオブジェクトを取得し、オブジェクトのプロパティを更新します。更新は、WHERE 句のId で選択された1つのレコードに対してのみ実行されることに注意してください。

using System.Linq;

ExcelOnlineEntities context = new ExcelOnlineEntities();

var Test_xlsx_Sheet1Query = from Test_xlsx_Sheet1 in context.Test_xlsx_Sheet1
                   where Test_xlsx_Sheet1.Id == "6"
                   select Test_xlsx_Sheet1;

foreach (var result in Test_xlsx_Sheet1Query) {
  result.Column2 = "Bob";
}

try {
  context.SaveChanges();
} catch (Exception e) {
  Console.WriteLine(e);
}

LINQ 要素演算子の使用

SingleOrDefault およびFirstOrDefault 要素演算子は、操作するオブジェクトを取得する別の方法を提供します。これらの要素演算子を使用して、複数のレコードの更新を簡略化することもできます。

更新する単一エンティティの選択

次の例に示すように、SingleOrDefault 要素演算子を使う方法でも、先のLINQ クエリと同様の結果が得られます。

  ExcelOnlineEntities context = new ExcelOnlineEntities();
  var Test_xlsx_Sheet1 = context.Test_xlsx_Sheet1.SingleOrDefault(o => o.Id == "150000-933272658");
  Test_xlsx_Sheet1.Column1 = "Jon Doe";
  context.Entry(Test_xlsx_Sheet1).State = System.Data.Entity.EntityState.Modified;
  context.SaveChanges();

エンティティのセットの更新

エンティティのセットを更新するには、複数のクエリを実行します。次の例は、前述の例を基礎にして作られています。ここでは、すべてのレコードが更新され、一度に1つのレコードだけが更新されるというLINQ の制限が回避されています。最初のクエリでは、目的の条件に一致する一連のレコード(この例では、Column2 が"Bob" である全レコード)が取得されます。

次に、各レコードId についてそれぞれ個別のクエリが実行されて、Description が変更、保存されます。このアプローチではパフォーマンスが大幅に低下します。これは、更新のたびに別の接続を確立する必要があるためです。

ExcelOnlineEntities context = new ExcelOnlineEntities();

//Select everything matching the condition
var Test_xlsx_Sheet1Query = from Test_xlsx_Sheet1 in context.Test_xlsx_Sheet1
                   where Test_xlsx_Sheet1.Column2 == "Bob"
                   select Test_xlsx_Sheet1;

foreach (var result in Test_xlsx_Sheet1Query) {
  //For each record matching the condition, perform a separate
  //command to update the attributes you desire to change.
  var updateRecord = from Test_xlsx_Sheet1 in context.Test_xlsx_Sheet1
                     where Test_xlsx_Sheet1.Id == result.Id
                     select Test_xlsx_Sheet1;
                     
  //Since the record was selected using the record's unique primary key, you can derive the updateRecord using the
  //FirstOrDefault method.
  updateRecord.FirstOrDefault().Description = "test desc";

  try {
    //Commit the changes to the database.
    context.SaveChanges();
  } catch (Exception e) {
    Console.WriteLine(e);
  }
}

 
 
Copyright (c) 2020 CData Software, Inc. - All rights reserved.
Build 19.0.7354.0