2011-08-25 5 views
7

LINQ가있는 컬렉션에서 대량 업데이트를 수행 할 수 있습니까? 현재 List<myObject>이 있고 목록의 모든 행에 대해 동일한 TEST로 column1을 업데이트하려는 경우 foreach 루프를 설정하고 각 개별 객체에 대해 값을 설정 한 다음 저장합니다. 이 잘 작동하지만 만약 거기에 어떤 LINQ 방법 밖에 거기에 myOject.BulkUpdate(columnName, value) 같은 것을 할 수있는 궁금 해서요?LINQ to SQL을 통한 대량 업데이트

+1

당신은 LINQ - 투 - SQL에 대해 이야기하고 있는가? –

+0

XML을 대량 데이터로 사용하여 대량 업데이트를 수행하기 위해 저장 프로 시저로 돌아 왔지만 LINQ에서 가능한지 알고 싶습니다. –

답변

5

LINQ To SQL을 사용하고있는 것처럼 들리며 이미 기본을 배웠습니다.

LINQ To SQL은 테이블을 클래스로 추상화하는 것으로, '은색 총알'이나 원 - 라이너를 제공하지 않습니다.

유일한 방법은 저장 프로 시저가 해당 열 이름과 새 값을 가져 와서 논리를 직접 구현하는 것입니다.

db.MassUpdateTableColumn("Customer", "Name", "TEST"); 

.... 
CREATE PROC MassUpdateTableColumn 
    @TableName varchar(100), @ColumnName varchar(100), @NewVal varchar(100) 
AS 
    /*your dynamic SQL to update a table column with a new val. */ 

그렇지 않으면, 그것은 당신이 설명하는대로입니다 :

List<Customer> myCusts = db.Customers.ToList(); 
foreach(Customer c in myCusts) 
{ 
    c.Name = "TEST"; 
}  
db.SubmitChanges(); 
+0

예이 작업을 수행하는 방법을 알고 있습니다. 더 유선형의 LINQ 함수가 있는지 묻는 것입니다. – esastincy

1

LINQ를 SQL (또는 EF 그 문제에 대해), 그들 모두를 조작, 메모리에 객체를 데려에 관한 것입니다, 그런 다음 각 행에 대해 별도의 데이터베이스 요청으로 업데이트합니다.

클라이언트에서 전체 개체를 수화 할 필요가없는 경우 LINQ 대신 서버 측 작업 (stored procs, TSQL)을 사용하는 것이 훨씬 좋습니다. LINQ 공급자를 사용하여 데이터베이스에 대해 TSQL을 실행할 수 있습니다. 예를 들어, LINQ to SQL을 사용하면 context.ExecuteCommand ("테이블을 업데이트 할 필드의 값을 조건으로 설정")을 사용할 수 있습니다. SQL Injection에주의하십시오.

9

이 항목에 대한 Linq 표현식과 Terry Aney의 우수 라이브러리를 사용하면 완전히 사용자 요구 사항을 충족 할 수 있습니다.

Batch Updates and Deletes with LINQ to SQL

다음과 같이 될 것이다 준 예제의 관점에서 업데이트 :

using BTR.Core.Linq; 
... 

Context.myObjects.UpdateBatch 
(
    Context.myObjects.Where(x => x.columnName != value), 
    x => new myObject { columnName = value} 
); 

편집 (2017년 1월 20일를) : 그것은 가치가 아무것도이 사용할 수 있습니다 없습니다 NuGet 패키지 @https://www.nuget.org/packages/LinqPost/의 형태로 제공됩니다.

Install-Package LinqPost 
+2

RBAR을 피하기 위해 Upvoted, 첫 번째 대답은 정말 정확하지 않습니다. – Jasmine

관련 문제