■ LINQ(Language INtegrated Query)
- SQL문법처럼 C#에서 사용할 수 있는 질의(Query) 기능
- 질의(Query)는 데이터 집합에서 원하는 정보를 찾는 작업
- 질의 구성 요소
· From : 데이터 집합
· Where : 조건
· Select : 항목
■ LINQ 사용
■ Example
using System;
using System.Collections.Generic;
using System.Linq;
namespace LinqExample
{
class Program
{
static void Main(string[] args)
{
List<int> list = new List<int>() { 100, 200, 300, 400, 500 };
var result = from num in list
where num >= 200
select num;
foreach(var num in result)
Console.WriteLine($"200 이상 값 : {num}");
}
}
}
■ Group by
- 데이터 정렬
- ascending(오름차순), descending(내림차순)
- 생략할 경우 기본값 ascending(오름차순) 적용
■ Example
using System;
using System.Collections.Generic;
using System.Linq;
namespace LinqExample
{
class User
{
public int id { get; set; }
public string name { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<User> users = new List<User>()
{
new User() { id = 10, name = "홍길동"},
new User() { id = 20, name = "이순신"},
new User() { id = 30, name = "장보고"},
new User() { id = 40, name = "유관순"},
new User() { id = 50, name = "장영실"},
};
var result = from user in users
where user.id > 20
orderby user.id descending
select user;
foreach(var user in result)
Console.WriteLine($"[내림차순 적용] id : {user.id}, name : {user.name}");
}
}
}
■ Join
- 두 데이터 원본을 연결하는 연산
- 데이터 원본의 특정 필드가 일치하는 데이터로 연결
- 내부 조인 : 두 데이터 원본의 일치하는 데이터만 반환(교집합)
- 외부 조인 : 한쪽 데이터 원본을 기준으로 결합한 데이터만 반환
■ 내부 조인 사용
using System;
using System.Collections.Generic;
using System.Linq;
namespace LinqExample
{
class Group
{
public string Name { get; set; }
public int userID { get; set; }
}
class User
{
public int id { get; set; }
public string name { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<Group> groups = new List<Group>()
{
new Group() {Name = "A", userID = 10},
new Group() {Name = "A", userID = 20},
new Group() {Name = "B", userID = 30},
new Group() {Name = "B", userID = 40}
};
List<User> users = new List<User>()
{
new User() { id = 10, name = "홍길동"},
new User() { id = 20, name = "이순신"},
new User() { id = 30, name = "장보고"},
new User() { id = 40, name = "유관순"},
new User() { id = 50, name = "장영실"},
};
var result = from usr in users
join grp in groups
on usr.id equals grp.userID
select new
{
GroupName = grp.Name,
id = usr.id,
name = usr.name
};
foreach(var item in result)
Console.WriteLine($"[result 결과] GroupName : {item.GroupName}, id : {item.id}, name : {item.name}");
}
}
}
■ 외부 조인 사용
using System;
using System.Collections.Generic;
using System.Linq;
namespace LinqExample
{
class Group
{
public string Name { get; set; }
public int userID { get; set; }
}
class User
{
public int id { get; set; }
public string name { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<Group> groups = new List<Group>()
{
new Group() {Name = "A", userID = 10},
new Group() {Name = "A", userID = 20},
new Group() {Name = "B", userID = 30},
new Group() {Name = "B", userID = 40}
};
List<User> users = new List<User>()
{
new User() { id = 10, name = "홍길동"},
new User() { id = 20, name = "이순신"},
new User() { id = 30, name = "장보고"},
new User() { id = 40, name = "유관순"},
new User() { id = 50, name = "장영실"},
};
var result = from usr in users
join grp in groups
on usr.id equals grp.userID into GrpUsrs
from grpusr in GrpUsrs.DefaultIfEmpty (
new Group() { Name = "무소속"})
select new
{
GroupName = grpusr.Name,
id = usr.id,
name = usr.name
};
foreach(var item in result)
Console.WriteLine($"[result 결과] GroupName : {item.GroupName}, " +
$"id : {item.id}, name : {item.name}");
}
}
}
'개인공부 > C#' 카테고리의 다른 글
[C#] Func, Action 대리자 (0) | 2023.02.17 |
---|---|
[C#] 람다식(Lambda Expression) (0) | 2023.02.17 |
[C#] 대리자(Delegate), 이벤트(Event) 차이점 (0) | 2023.02.15 |
[C#] 이벤트(Event) (0) | 2023.02.14 |
[C#] 대리자(Delegate) (0) | 2022.10.13 |