유지보수 cost때문에 Linq를 아주 권장하지는 않지만,

row의 type으로 인한 이슈나 속도 이슈를 막기 위해서,

꼭 써야될 때가 있다.

특히 datatable간의 비교가 많은데 다음과 같은 경우 2개가 질문이 많이 나오는 걸로 보인다.

 

[상황1] dtData1의 키값이 dtData2의 키컬럼에 존재하는 경우 포함[키컬럼 type은 int]

[Assign] dtOutput = (from row1 in dtData1.AsEnumerable()
                     join row2 in dtData2.AsEnumerable() on row1.Field<int>("Key") equals row2.Field<int>("Key")
                     select row1).CopyToDataTable()

 

[상황2] dtData1의 키값이 dtData2의 키컬럼에 존재하는 경우 미포함[키컬럼 type은 int]

[Assign] TempKeys = (dtData2.AsEnumerable().Select(row => row.Field<int>("Key"))).ToArray()

[Assign] dtOutput = (dtData1.AsEnumerable().Where(row => !tempjoin.Contains(row.Field<int>("Key")))).CopyToDataTable()

+ Recent posts