2010-08-24 1 views
0

일부 레코드가 포함 된 DataTable이 있습니다. 몇 가지 조건에 따라 레코드를 두 개의 데이터 테이블로 필터링해야합니다.LINQ To DataSet의 사례 조건을 사용하는 방법

When row["ItemType"]==1 
    //Insert item into DataTable 1 
When row["ItemType"]==2 
    //Insert item into DataTable 2 
Else 
    //Insert item into DataTable 3 

어떻게 모든 레코드를 포함하는 DataTable에 대한 LINQ에서이 작업을 수행하는 말?

답변

0

LINQ는 읽기 작업을위한 쿼리 언어입니다. LINQ 쿼리에서 삽입 작업을 수행 할 수 없습니다.

var rows1 = from row in rows where row["ItemType"] == 1 select row; 
var rows2 = from row in rows where row["ItemType"] == 2 select row; 
var rows3 = from row in rows where row["ItemType"] == 3 select row; 

foreach (var row in rows1) { /* Insert item into DataTable1 */ } 
foreach (var row in rows2) { /* Insert item into DataTable2 */ } 
foreach (var row in rows3) { /* Insert item into DataTable3 */ } 


업데이트 :

또는 단일 LINQ 문에 그것을 할 수있을 때, 당신은이 작업을 수행 할 수 있습니다 : 당신이 할 수있는 세 가지 LINQ 쿼리를 작성하고 개별적으로 반복이다

var rows = 
    from row in rows 
    select new { Row = row, Item = row["ItemType"] }; 

foreach (var row in rows) 
{ 
    switch (row.Item) 
    { 
     case 1: 
      // Insert item into DataTable1 
      break; 
     case 2: 
      // Insert item into DataTable2 
      break; 
     case 3: 
      // Insert item into DataTable3 
      break; 
    } 
} 

업데이트 : 또 다른 옵션 : 그래서

var rows = 
    from row in rows 
    select new 
    { 
     Row = row, 
     Table = row["ItemType"] == 1 ? table1 : 
      (row["ItemType"] == 2 ? table2 : table3) 
    }; 

foreach (var row in rows) 
{ 
    var table = row.Table; 
    var row = row.Row; 

    table.Rows.Add(row); 
} 
+0

는, 우리는 C를 의미 하는가 annot은 어떤 식 으로든 단일 Linq 선언문에서 전체 프로세스를 수행합니까? –

+0

@Shantanu : 예, 단일 LINQ 문을 작성할 수 있습니다. 내 업데이트를 참조하십시오. – Steven

+0

이것은 내가 기대했던 것이 아닙니다. 이것은 linq을 사용하지 않고도 완료되었을 수 있습니다. –