2022년 2월 5일 토요일

C# 링크, LINQ, 쿼리구문, 메서드구문 실습, 쿼리변수, Count, Max, Average 및 First, ToList, 닷넷학원, 자바학원, WPF학원, C#학원

 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 


C# 링크, LINQ, 쿼리구문, 메서드구문 실습, 쿼리변수, Count, Max, Average 및 First, ToList

C# 링크, LINQ, 쿼리구문, 메서드구문 실습, 쿼리변수, Count, Max, Average 및 First, ToListLINQ쿼리식, 메서드 형태 실습❶ LINQ(Language Integrated Query)에서 대부분의 쿼리는 선언적 쿼리 구문(from ~ select)을 사

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, 시샵교육, 시샵동영상, 닷넷동영상, 닷넷교육, 닷넷학원, 

2022년 2월 4일 금요일

[C#동영상]C# 링크(LINQ) 소개, HelloWorld, 쿼리식기반, 메서드기반 FROM, SELECT, GROUP, WHERE, C#학원, 닷넷학원, 자바학원, WPF학원, 시샵학원

[C#동영상]C# 링크(LINQ) 소개, HelloWorld, 쿼리식기반, 메서드기반 FROM, SELECT, GROUP, WHERE, C#학원, 닷넷학원, 자바학원, WPF학원, 시샵학원


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


C# 링크(LINQ) 소개, HelloWorld, 쿼리식기반, 메서드기반 FROM, SELECT, GROUP, WHERE

C# 링크(LINQ) 소개, HelloWorld, 쿼리식기반, 메서드기반 FROM, SELECT, GROUP, WHEREC# 링크(LINQ) 소개HelloWorld쿼리기반, 메서드 기반C# 링크(Language-Integrated Query, Linq)LINQ는 C#, VB.NET에 통합된 질의 기능이며, 친

ojc.asia

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





C# 링크(LINQ) 소개

HelloWorld

쿼리기반, 메서드 기반





C# 링크(Language-Integrated Query, Linq)

 

  • LINQ는 C#, VB.NET에 통합된 질의 기능이며, 친숙한 언어구문을 많이 사용하기에 이해하기가 쉽다.

 

  • 데이터베이스의 데이터를 질의하기 위해 Structured Query Language(SQL)을 사용하지만 LINQ는 컬렉션 객체, DataSet, XML Docs, 웹서비스, MS-SQL서버 및 기타 데이터베이스와 같은 다양한 유형의 데이터 소스에서 데이터를 검색하기 위해 C# 및 VB.NET에 통합된 질의 기능이다.

 


 

  • LINQ는 문법이 SQL과 비슷한 쿼리식 형태와 이를 확장 메소드로 구현하여 제공하는 메서드 구문 형태가 있는데 두 가지 다른 형식 사이에는 의미 또는 성능 차이가 없다.

 

[쿼리식 형태] 
var empList2 = from emp in emps
                            where emp.Sal > 1000
                            select emp;

[메서드 기반 형태]
var empList3 = emps.Where(emp=> emp.Sal > 1000).ToList<Emp>();



  • 대부분의 쿼리에서 LINQ의 선언적 쿼리식을 사용한다. 표준 쿼리 연산자 Where, Select, GroupBy, Join, Max, 및 Average 등을 이용하여 쿼리 구문 대신 메소드 기반 쿼리식을 사용할 수도 있다. Count 또는 Max와 같은 일부 쿼리 작업에는 동등한 쿼리 식 절이 없으므로 메서드기반을 사용해야 한다.

 

  • 쿼리식은 메서드구문 형태로 변환된다. 쿼리 구문을 사용하여 표현할 수 있는 쿼리는 메서드 구문으로도 표현할 수 있다. 그러나 대부분의 경우 쿼리 구문이 더 읽기 쉽고 간결하다.

 

  • 쿼리 식의 변수는 대부분 컴파일러에서 형식을 유추할 수 있으므로 형식을 명시적으로 제공하지 않아도 된다.



LINQ 쿼리식 기본

 

Linq 기본 문법

 

from <범위변수> in <IEnumerable<T> or IQueryable<T> Collection>

<Standard Query Operators> <lambda expression>
where, orderby, join, let등 쿼리 연산자

<select or groupBy

 


 

FROM

 

LINQ 쿼리식은 FROM절로 시작하고 범위변수가 뒤따른다, 데이터원본의 데이터를 나타내는 범위 변수를 FROM절에 기술해야 한다. in 다음에 나오는 데이터원본 형식은 자유로우며 IEnumerable<T>, IQueryable<T> 인터페이스를 상속하는 형식이어야 한다. 그러므로 배열이나 컬렉션 객체들은 FROM 절에 올 수 있다. 

 

범위변수는 쿼리변수라고도 하는데 foreach의 반복변수 정도로 보면 된다. Foreach 반복변수와 범위변수가 다른 점은 Foreach 반복변수가 원본으로부터 데이터를 담고 있지만 범위변수는 데이터를 담고 있지는 않다. 그러므로 쿼리식 외부에서 선언된 변수에 범위변수의 데이터를 복사할 수는 없다. 범위변수는 오로지 LINQ 질의 안에서만 통용된다.


 

LINQ에서 사용되는 쿼리식은 from 절로 시작하여 select 또는 group 절로 끝나야 한다. 첫 번째 from 절과 마지막 select 또는 group 절 사이에는 where, orderby, join, let 및 추가 from 절과 같은 쿼리 연산자가 하나 이상이 포함될 수 있으며 into 키워드를 사용하여 join 또는 group 절의 결과를 같은 쿼리 식에 있는 다른 쿼리 절의 소스로 사용할 수 있다. Linq에는 50개 정도의 표준 쿼리 연산자가 있다.

 

WHERE

 

조건 필터링을 하는 연산자, FROM절의 범위변수가 가져야 하는 조건을 WHERE 연산자에 매개변수로 입력하면 LINQ는 해당 조건에 맞는 데이터만 추출한다.



ORDERBY

 

추출되는 데이터의 정렬을 수행하는 연산자

 

SELECT or Group

 

LINQ쿼리는 항상 Select 또는 Group절로 끝난다. Select절은 추출할 데이터를 형성하는데 사용되는데 전체 객체를 그냥 추출할건지, 일부 속성만 추출 할것인지등을 선택 한다.

 

var empList2 = from emp in emps
                            where emp.Sal > 1000
                            select emp;

var empList2 = from emp in emps
                            where emp.Sal > 1000
                            select new 
                            {
                                emp.Empno, 
                                emp.Ename
                            }
var empList4 = from emp in emps
                    group emp by emp.Ename[2];



[실습 : 링크를 사용하지 않은 경우와 링크를 사용한 예]

class Emp
{
    public int Empno { get; set; }
    public string Ename { get; set; }
    public int Sal { get; set; }
    public override String ToString()
    {
        return "Emp : " + Empno + "," + Ename + "," + Sal;
    }
}
class LinqTest
{
    private static List<Emp> emps = new List<Emp>
    {
        new Emp() { Empno = 1, Ename="1길홍", Sal=900},
        new Emp() { Empno = 2, Ename="2길동", Sal=1500},
        new Emp() { Empno = 3, Ename="3길홍", Sal=800}
    };

    static void Main()
    {
        List<Emp> empList = new List<Emp>();

        //링크 사용전
        foreach(var emp in emps)
        {
            if (emp.Sal > 1000) empList.Add(emp);
        }
        foreach (var emp in empList) Console.WriteLine(emp);

        //링크사용(쿼리기반 표현식)
        var empList2 = from emp in emps
                       where emp.Sal > 1000
                       select emp;
        foreach (var emp in empList2) Console.WriteLine(emp);

        //링크사용(메서드 기반 표현식)
        var empList3 = emps.Where(emp=> emp.Sal > 1000).ToList<Emp>();
        foreach (var emp in empList3) Console.WriteLine(emp);

        //GROUP BY
        var empList4 = from emp in emps
                       group emp by emp.Ename[2];
        foreach (var empGroup in empList4)
        {
            Console.WriteLine($"Key: {empGroup.Key}");
            //각 그룹항목을 추출
            foreach (var emp in empGroup)
            {
                Console.WriteLine($"\t{emp.Empno}, {emp.Ename}");
            }
        }
    }
}



#링크, #LINQ, #LINQHelloWorld, #쿼리식, #메서드기반, #링크쿼리, #시샵링크, #닷넷링크, #시샵동영상, #닷넷동영상, #닷네교육, #닷넷학원, 링크, LINQ, LINQHelloWorld, 쿼리식, 메서드기반, 링크쿼리, 시샵링크, 닷넷링크, 시샵동영상, 닷넷동영상, 닷네교육, 닷넷학원, 

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...