C# 링크, LINQ, 쿼리구문, 메서드구문 실습, 쿼리변수, Count, Max, Average 및 First, ToList, 닷넷학원, 자바학원, WPF학원, C#학원
https://www.youtube.com/watch?v=GqDWbAOjO4A&list=PLxU-iZCqT52DJyR6gqJy0MCL8RiTVXdos&index=22

https://www.youtube.com/watch?v=AKZD0AtADT8&list=PLxU-iZCqT52DJyR6gqJy0MCL8RiTVXdos&index=23

http://ojc.asia/bbs/board.php?bo_table=LecCsharp&wr_id=414
ojc.asia

LINQ
쿼리식, 메서드 형태 실습
❶ LINQ(Language Integrated Query)에서 대부분의 쿼리는 선언적 쿼리 구문(from ~ select)을 사용하여 작성한다.
➋ 이러한 쿼리 구문은 코드를 컴파일할 때 .NET CLR에 대한 메서드 호출로 변환해야 하는데, 이러한 메서드 호출은 Where, Select, GroupBy, Join, Max, Average 등과 같은 표준 쿼리 연산자를 이용하여 호출하도록 변경한다.
❸ 또한 C# 개발자는 쿼리 구문 대신 메서드 구문을 사용하여 표준 쿼리 연산자를 직접 호출할 수 있다.
❹ 쿼리 구문과 메서드 구문은 의미상 동일하지만, 쿼리 구문이 더 간단하고 읽기 쉽다.
C# LINQ 종류
[쿼리 구문] var empList = from emp in emps where emp.Sal > 1000 select emp; foreach (var emp in empList) Console.WriteLine(emp); ➊쿼리 변수 자체는 쿼리 명령을 저장할 뿐이다. 실제 쿼리 실행은 foreach 문에서 쿼리 변수가 반복될 때 실행된다. ❷데이터 소스에 대해 집계 함수를 수행하는 쿼리는 먼저 해당 요소를 반복해야 한다. 이러한 쿼리의 예로 Count, Max, Average 및 First가 있다. 이러한 쿼리는 쿼리 자체에서 결과를 반환하려면 foreach를 사용해야 하기 때문에 명시적 foreach 문 없이 즉시 실행된다. ❸또한 모든 쿼리를 즉시 실행하고 그 결과를 캐시하기 위해 ToList 또는 ToArray 메서드를 호출할 수 있다. List<int> numList = (from num in numbers where (num % 2) == 0 select num).ToList(); [메서드 구문] var empList3 = emps.Where(emp=> emp.Sal > 1000).ToList<Emp>(); |
C# LINQ(쿼리식 기반)
namespace LinqTest
{
class Emp
{
public int Empno { get; set; }
public string Ename { get; set; }
public int Sal { get; set; }
}
class Test
{
static void Main(string[] args)
{
int[] scores = { 70, 99, 59, 88, 81, 97 };
//최고점수
int maxScore = (
from score in scores
select score
).Max();
Console.WriteLine("최고점수 : {0}", maxScore);
//아래처럼 쿼리식을 분리해도 된다.
//LINQ질의 결과는 IEnumerable<T> 형태로 반환되는데 형식매개변수
//T는 쿼리식의 select문에 의해 결정된다.
//아래 쿼리식의 결과 select n은 int형 이므로 IEnumerable<int>가 리턴된다.
IEnumerable<int> scoreQuery = from score in scores
select score;
int lowScore = scoreQuery.Min();
Console.WriteLine("최소점수 : {0}", lowScore);
Emp[] emps = {
new Emp() { Empno = 1, Ename="1길홍", Sal=900},
new Emp() { Empno = 2, Ename="2길동", Sal=1500},
new Emp() { Empno = 3, Ename="3길홍", Sal=800}
};
var empList = from emp in emps
where emp.Ename.Contains("홍")
orderby emp.Sal
select new
{
Sabun = emp.Empno,
Name = emp.Ename,
Salary = emp.Sal * 12
};
foreach (var o in empList) Console.WriteLine("{0}, {1}, {2}", o.Sabun, o.Name, o.Salary);
}
}
}
C# LINQ(메소드기반)
namespace MethodExam
{
class Test
{
static void Main(string[] args)
{
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//짝수를 내림차순 정렬하여 출력
IEnumerable<int> q1 = numbers.Where(num => num % 2 == 0).OrderByDescending(n => n);
foreach (int i in q1) Console.Write(i + " ");
Console.WriteLine();
//짝수의 합
int sum = numbers.Where(num => num % 2 == 0).Sum();
Console.WriteLine("짝수 합 = " + sum);
//짝수중 최대값
int max = numbers.Where(num => num % 2 == 0).Max();
Console.WriteLine("짝수중 Max = " + max);
//짝수의 평균값
double avg = numbers.Where(num => num % 2 == 0).Average();
Console.WriteLine("Avg = " + avg);
//Aggregate는 주어진 연산의 결과를 포워드 하면서 진행된다.
// 1*2 한 후 결과를 3과 곱하고, 다시 결과를 4와 곱함...
var result = numbers.Aggregate((a, b) => a * b);
Console.WriteLine("Aggregation = " + result);
// 10은 SEED, 10+1 결과를 2와 더하고 다시 결과를 3과 더함...
result = numbers.Aggregate(10, (a, b) => a + b);
Console.WriteLine("Aggregation with seed =" + result);
// 짝수를 대상으로 2 * 4 한 후 결과를 6과 곱하고...
result = numbers.Where(num => num % 2 == 0).Aggregate((a, b) => a * b);
Console.WriteLine("Aggregation.Where = " + result);
string[] emps = { "1홍길동", "5길홍", "4길동", "2길홍" };
Console.WriteLine("\n----- 이름에 '홍'이 포함된것");
var names = emps.Where(s => s.Contains("홍"));
foreach (var name in names) Console.WriteLine(name);
Console.WriteLine("\n----- 이름 길이가 3보다 큰것");
names = emps.Where(s => s.Length > 3);
foreach (var name in names) Console.WriteLine(name);
Console.WriteLine("\n----- 이름 길이로 정렬");
names = emps.OrderBy(s => s.Length);
foreach (var name in names) Console.WriteLine(name);
Console.WriteLine("\n----- 이름이 '1'로 시작");
names = emps.Where(s => s.StartsWith("1"));
foreach (var name in names) Console.WriteLine(name);
Console.WriteLine("\nThe End -------------");
}
}
}
#링크, #링큐, #LINQ, #시샵LINQ, #닷넷LINQ, #시샵교육, #시샵동영상, #닷넷동영상, #닷넷교육, #닷넷학원, 링크, 링큐, LINQ, 시샵LINQ, 닷넷LINQ, 시샵교육, 시샵동영상, 닷넷동영상, 닷넷교육, 닷넷학원,
댓글 없음:
댓글 쓰기