1

Database.cs ファイルに linq クエリを書き込もうとしています。それは難しいと思います。SQL を linq に変換するツールはありますか? linqer を試してみましたが、ダメです。または、次のクエリをlinqで書くのを手伝ってくれませんか。

update table 
set field1='R', 
    field2='" + DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss") + "', 
    field3 = '" + util.CleanStringInput(value1) + "'
where field1 = 'P' 
    and field3 = '" + value2 + "' 
    and field4 = (select max(field5) 
                  from table2 
                  where field6='" + value2 + "')
4

2 に答える 2

1

最も簡単な方法は、エンティティを取得し、プロパティを設定してから変更を保存することです。

var maxFromTable2 = context.YourTables2.
                            Where(t2 => t2.field6 == value2).
                            Max(t2 => t2.field5);

var entitiesToUpdate = context.YourTables.
                               Where(t => t.field1 == "P" && 
                                          t.field3 == value2 && 
                                          t.field4 ==  maxFromTable2).
                               ToList();

foreach (var entityToUpdate in entitiesToUpdate)
{
    entityToUpdate.field1 = "R";
    entityToUpdate.field2 = DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss");
}

context.SaveChanges();

注: あなたの質問からは、更新しているテーブルが明確ではないため、デフォルトでは とは異なるテーブルであると想定していますtable2。LINQ to SQL または Entity Framework (LINQ to Entitites) のどちらを使用しているかを示すと役立ちます。現在の構文は EF 用です。

于 2012-06-14T11:52:38.160 に答える
0

LINQ to SQL/EF は、オブジェクトをハイドレートしてそれらを操作し、変更を保存することを目的としています。バッチ操作の代替として意図されたものではありません。この場合に EF/LINQ to SQL を使用すると、データベースに n+1 の要求を発行することになります。変更するレコードを選択するための 1 つと、更新する各行 (オブジェクト) に対する個別の要求です。データ セットが小さい場合、これは管理しやすいかもしれませんが、何らかのボリュームがある場合は、これを単一の Update ステートメントを使用してストアド プロシージャに保持することをお勧めします。

于 2012-06-14T12:35:50.887 に答える