[Uipath] DT 다룰 때 자주 쓰이는 소스 모음

2022. 10. 31. 12:26RPA

1. 서로 다른 두 DT를 비교하여 겹치는 row를 삭제하고 싶을 때 (동일한 row 필터)

dt2 = dt2.AsEnumerable().Except(dt1.AsEnumerable(),DataRowComparer.Default).CopyToDataTable

-> dt2의 모든 row가 dt1에도 있을 시 dt2가 없어져서 오류 발생 (try catch 등 잘 보완해서 사용해야함)


2. 리스트에 포함되는 값을 갖고 있는 row만 남기는 소스

dtOutput = (From p In dtInput.Select Where join(lList,",").contains(p(Column_Index).ToString) Select p).ToArray.CopyToDataTable

-> List는 개수가 일정하지 않아서 필터 activity를 사용할 수 없음. (for문을 돌리더라도 다른 DT에 필터링된 row를 쌓아야함)

ex)

lJobDate ={"2022-10-01","2022-10-02","2022-10-03"}

dtInput의 날짜 column의 값이 위 리스트에 있는 값인 row만 남기고 싶을 때,  

dtInput = (From p In dtInput.Select Where Date.TryParse(p(0).ToString, dDate) AndAlso join(lJobDate ,",").contains(CDate(p(0)).ToString("yyyy-MM-dd")) Select p).ToArray.CopyToDataTable

이와 같이 사용했다.

(AndAlso 앞은 해당 컬럼 값이 DateTime 형식인지 확인하는 부분이다. 해당 컬럼 전체가 Datetime이면 상관 없지만 나는 글자만 있는 값도 있어서 위와 같이 처리했다. dDate라는 DateTime형 변수 생성해야함)


3. row 수 제한

DT = DT.AsEnumerable().Take(500).CopyToDataTable()

500줄로 제한하는 코드이다(맨 윗줄부터 500줄)


4. DT안의 특정 값을 replace하고싶을 때

DT = (From r In DT.AsEnumerable
Let ra = r.ItemArray.Select(Function (x) x.ToString.Trim.Replace("AAA","")).toArray()
Select testDT.Rows.Add(ra)).CopyToDataTable()

testDT = DT.clone

DT에서 AAA가 없어지는 코드

 


5. 한 컬럼의 값을 기준으로 중복제거(맨 첫번째 row만 남김)

DT=DT.AsEnumerable().GroupBy(Function(i) i.Field(Of String)(“Col1”)).Select(Function(g)  g.First).CopyToDataTable()

Col1 컬럼을 기준으로 첫번째 row만 남기고 중복제거 됨

 


6. DT의 한 컬럼을 List로 변경

[LIst 네임] = (From row in [DT이름].AsEnumerable() Select Convert.Tostring(row([List 만들고 싶은 컬럼 이름]))).ToList()

7. 특정 값이 있는 row의 index를 알고싶을 때

dt.Asenumerable.Tolist.Findindex(Function(r) r("컬럼명").Tostring.Equals("특정값"))

-> 특정 값이 첫번째로 있는 index를 반환 (값이 없을 시 -1)

dt.AsEnumerable.Where(Function(r) r("컬럼명").ToString="특정값").Select(Function(r) dt.Rows.IndexOf(r)).ToArray()

-> 특정 값이 있는 index를 리스트로 전부 반환 (값이 없을 시 빈 list)