C#에서 제공하는 기능 중 하나인 Linq는 데이터를 가공 하여 처리 할때 강력한 기능을 제공하는 문법입니다
배열형식이나 데이터형식들을 가공할때 쿼리처럼 사용 할 수있어 직관적이고 편리하게 사용 할 수 있는 문법이며
필터링 매핑 정렬등의 기능들을 활용하여 데이터들을 보다 쉽게 가공할 수 있습니다.
아래 예제들은 linq의 활용 예제입니다.
1.기본 Linq형
string[] strArr = { "사과", "바나나", "포도" };
/// <summary>
/// 기본 linq형
/// </summary>
public void LinqTest()
{
var result = from ride in strArr
where ride == "사과"
select ride;
foreach (var str in result)
{
MessageBox.Show(str.ToString());
}
}
위의 예제에서는 문자형식의 배열을 기본 링큐문법을 사용하여 "사과"인 데이터를 추출하는 로직입니다.
2.람다 활용 Linq
string[] strArr = { "사과", "바나나", "포도" };
public void LinqLamda()
{
var result = strArr.Where(p => p == "사과");
foreach (var str in result)
{
MessageBox.Show(str.ToString());
}
}
위의 예제는 위의 기본형과 똑같은 기능을 수행하는 로직이지만 람다식을 활용하여 더욱 간편하게 조건을 걸고 데이터를 추출 할 수 있습니다. 링큐는 주로 람다식을 활용하여 간편하게 데이터를 추출하고 가공할 수 있습니다.
3.Order by Linq
string[] strArr = { "사과", "바나나", "포도" };
public void LinqSort()
{
var sortStr = strArr.OrderBy(strArr => strArr);
foreach (var str in sortStr)
{
MessageBox.Show(str.ToString());
}
}
링큐에서 제공하는 Orderby메서드는 쿼리에서 사용하는 order by 쿼리문 처럼 정렬할 때 사용할 수 있습니다.
Order by 에서 정렬 한뒤 linq에서 제공하는 thenby메서드를 통해 2차적으로 정렬 할 수 있습니다.
4.Select요소 변환
public void LinqSelect()
{
//Select 메서드는 원하는 형식으로 변형 가능
var strLength = strArr.Select(p => p + "배추");
//.OrderBy(p=>p);
foreach (var str in strLength)
{
MessageBox.Show(str.ToString());
}
}
select 메서드는 linq를 활용하여 가공할 데이터들을 원하는 형식으로 변형하여 출력 할 수 있습니다. 위처럼 strArr배열에 있는 데이터들 뒤에 문자를 붙여서 출력할때는 뒤에 있는 배추라는 문자가 함께 출력됩니다.
5.Join Linq
public void LinqJoin()
{
string[] fruits = { "사과", "배" };
var strJoin = strArr.Join(fruits,//조인할 시퀀스
strArr => strArr, //시퀀스에서 조인 할 키 추출
fruits => fruits, //참조된 시퀀스에서 조인 할 키 추출
(strArr, fruits) => strArr);//두개의 시퀀스를 매개변수로하여 선택된 배열에 있는 요소 추출
foreach (var str in strJoin)
{
MessageBox.Show(str.ToString());
}
}
join메서드는 쿼리에서 join을 하듯이 시퀀스들의 키값을 매핑하여 원하는 데이터를 추출할 때 사용합니다. 위의 예제에서는 단순 문자형식의 배열이여서 람다식을 사용해 파라미터를 지정하였으나 만약 property가 있는 Entity객체였다면 키값을 따로 지정하면 됩니다.
6.Group by Linq
public void LinqGroup()
{
List<int> list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8 };
var evenOddGroup = list.GroupBy(p => p % 2 == 0 ? "EVEN" : "ODD");
foreach (var group in evenOddGroup)
{
//string.Join 을 사용하여 문자배열의 요소들을 결합
MessageBox.Show(group.Key + " 갯수:" + group.Count() + " 요소:" + string.Join(", ", group));
}
}
groupby메서드는 같은 키값로 요소들을 구분하여 출력 할 수 있는 기능이며 위의 예제에서 group의 속성에는 key라는 속성이 있어 해당 키값을 출력할 수 있으고 배열의 형태를 가져 각각의 요소들을 추출할때는 위의 예제에서 반복문을 한번 더 사용하면 각각의 요소를 추출 할 수 있습니다.
'c#' 카테고리의 다른 글
c# 문법 ref out 키워드의 차이점 (0) | 2023.06.22 |
---|---|
C# 문법 Action Func Predicate delegate 차이점 (0) | 2023.06.06 |
ASP.Net Core MVC Entity Frame work 사용하기 -1 (0) | 2023.04.17 |
C# visual studio 파일을 여는 중 무한 로딩 해결 방법 (1) | 2023.04.12 |
WPF Gird panel 사용법 (0) | 2023.03.23 |