서론
이번 글에서는 C#에서 SQL 연결을 해서 값을 받아와 사용한다면 거의 항시 사용하게 되는
DataTable의 데이터를 가져오는 방법을 정리할 것이다.
가져오는 방법은 단일 테이블 조회 시 datatable.Select("조건")함수를 써서 값을 조회 할 수 있지만 다중 테이블 간의 키 값으로 join을 사용해야되는 경우에는 Select()로 가져오기 힘들기 때문에 LINQ식의 join을 이용한 데이터 추출 방법을 정리해본다.
정리할 내용은 이렇다.
LINQ를 활용한 JOIN 사용법
> inner join, left join 용법을 이용한 테이블 및 변수 값 가져오기
LINQ를 활용한 JOIN 사용법
1) LINQ - Inner Join
var innerJoin = from alias_tb_a in tb_a.AsEnumerable()
join alias_tb_b in tb_b.AsEnumerable()
on alias_tb_a.Field<string>("A_key_column") equals alias_tb_b.Field<string>("B_key_column") into dataKey
from alias_tb_b in dataKey
select new
{
ID = alias_tb_a.Field<string>("A_table_ID"),
NAME = (result_table == null ? null : result_table.Field<string>("B_key_column"))
... // 위 방식처럼 변수에 값을 넣어 둘 수있음.
};
// result_table : join하여 나온 결과 테이블
// alias_tb_a.Field<string>("A_table_ID") : tb_a에서의 A_table_ID 컬럼의 값
// SQL 동일식
SELECT * FROM tb_a alias_tb_a
INNER JOIN tb_b alias_tb_b
ON
alias_tb_a.A_key_column = alias_tb_b.B_key_column
2) LINQ - Left Join
var leftJoin = from alias_tb_a in tb_a.AsEnumerable()
join alias_tb_b in tb_b.AsEnumerable()
on alias_tb_a.Field<string>("A_key_column") equals alias_tb_b.Field<string>("B_key_column") into dataKey
from result_table in dataKey.DefaultIfEmpty()
select new
{
ID = alias_tb_a.Field<string>("A_table_ID"),
NAME = (result_table == null ? null : result_table.Field<string>("B_key_column"))
... // 위 방식처럼 변수에 값을 넣어 둘 수있음.
};
// result_table : join하여 나온 결과 테이블
// alias_tb_a.Field<string>("A_table_ID") : tb_a에서의 A_table_ID 컬럼의 값
// SQL 동일식
SELECT * FROM tb_a alias_tb_a
LEFT JOIN tb_b alias_tb_b
ON
alias_tb_a.A_key_column = alias_tb_b.B_key_column
3) LINQ - 1&2 방법으로 Join을 돌린 후 테이블 조회 및 값 추출 방법
string ID = "Jeongkyun";
var joinTable = from tb1 in leftJoin.AsEnumerable()
where a.ID == ID //만약 조건 안쓰고 싶다하면 1=1로 정의
select tb1;
//SQL 동일 식
//: SELECT * FROM joinTable WHERE ID = 'Jeongkyun';
//위에서 ID 변수 쓰는법 예제.
int row_index= 0; //추출할 row 인덱스
string select_id = joinTable[row_index].ID.Tostring();
//join table을 Datagrdview에 넣는법
Datagridvew dgv = new Datagridview();
dgv.DataSource = joinTable.ToArray();
4) LINQ - Join하여 나온 결과 테이블을 새로운 데이터 테이블에 넣는법
IEnumerable<DataRow> result_table =
from alias_tb_a in tb_a.AsEnumerable()
join alias_tb_b in tb_b.AsEnumerable()
on alias_tb_a.Field<string>("A_key_column") equals alias_tb_b.Field<string>("B_key_column") into dataKey
from result in dataKey.DefaultIfEmpty()
select result_table;
DataTable dt = result_table.CopyToDataTable<DataRow>();
//위와 같이하면 dt에 join한 결과 테이블 값이 담긴다.
반응형
'Programming > C#' 카테고리의 다른 글
[VisualStudio] .net 5.0 종속성에 어셈블리(dll) 추가가 안될 때 !!! (2) | 2022.01.05 |
---|---|
C# 크로스 스레드(Cross Thread)란? (에러 발생 이유 / 해결 방법) (0) | 2021.12.29 |
C# 단위 별 실행 시간 확인 하는 방법 (단위 테스트/UnitTest) (0) | 2021.12.22 |
C# 파일명과 확장자 추출 함수 정리 (0) | 2021.12.15 |
C# 경로(Path) 함수 정리 (0) | 2021.12.15 |
댓글