2014년 5월 28일 수요일

38. C# LYNQ란(링크), 닷넷LYNQ, WHERE, ORDERBY, IEnumerable[닷넷C#교육/ADO.NET강좌/ASP.NET교육잘하는곳/C#,ASP.NET교육추천/닷넷실무교육/.NET,C#/ADO.NET교육/닷넷학원/ASP.NET실무교육] LYNQ(Language Integrated Query, 링크)는 C#에 통합된 데이터 질의 기능을 이야기 한다. 일반적으로 데이터베이스의 데이터를 질의하기 위해 Structured Query Language(SQL)을 사용하지만 이는 DB의 데이터를 다루기 위한 질의어로 객체(컬렉션)를 질의할 수 있는 LYNQ와는 다르다. LINQ가 쿼리, 질의할 수 있는 데이터 소스는 상당히 광범위하며, 그 중 .NET Framework4에서 기본적으로 제공하는 대상은 컬렉션 형태를 가지는 object와 DataSet, 그리고 관계형 데이터베이스인 SQL 서버와 XML 파일 등 이다. LYNQ는 표준 쿼리 연산자를 통해 사용되며 문법이 SQL과 비슷한 쿼리 기반 표현식 과 이를 확장 메소드로 구현하여 제공하는 메소드 기반 쿼리가 포함된다. 1. LYNC 기본 FROM 모든 LYNQ 쿼리식은 반드시 FROM절로 시작하는데 데이터원본의 데이터를 나타내는 범위 변수를 FROM절에 기술해야 한다. 데이터원본 형식은 자유로우며 IEnumerable 인터페이스를 상속하는 형식이어야 한다. 그러므로 배열이나 컬렉션 객체들은 FROM절에 올 수 있다. 범위변수는 쿼리변수라고도 하는데 foreach의 반복변수 정도로 보면 된다. Foreach 반복변수와 범위변수가 다른 점은 반복변수가 원본으로부터 데이터를 담고 있지만 범위변수는 데이터를 담고 있지는 않다. 그러므로 쿼리식 외부에서 선언된 변수에 범위변수의 데이터를 복사할 수는 없다. 범위변수는 오로지 LINQ 질의 안에서만 통용된다. LYNQ에서 사용되는 쿼리 식은 from 절로 시작하여 select 또는 group 절로 끝나야 한다. 첫 번째 from 절과 마지막 select 또는 group 절 사이에는 where, orderby, join, let 및 추가 from 절과 같은 선택적 절 중 하나 이상이 포함될 수 있으며 into 키워드를 사용하여 join 또는 group 절의 결과를 같은 쿼리 식에 있는 다른 쿼리 절의 소스로 사용할 수 있다. WHERE 필터역할을 하는 연산자, FROM절의 범위변수가 가져야 하는 조건을 where 연산자에 매개변수로 입력하면 LYNQ는 해당 조건에 맞는 데이터만 걸러낸다. ORDERBY 데이터 정렬을 수행하는 연산자 SELECT 최종 결과를 추출하는 쿼리식의 마침표. [예제 1 : 배열에서 홀수 값 오름차순, 3보가 큰수 내림차순 추출] using System; using System.Linq; using System.Collections.Generic namespace from { class Onj { static void Main(string[] args) { int[] num = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var onjQuery1 = from n in num where n % 2 == 1 orderby n select n; foreach (int i in onjQuery1) Console.WriteLine("홀수 : {0}", i); // Query __EXPRESSION__. IEnumerable onjQuery2 = //query variable from n in num //데이터소스 및 범위변수(필수) where n > 3 // 생략가능 orderby n descending // 내림차순정렬(생략가능) select n; //select or group으로 끝나야 한다. foreach (int i in onjQuery2) { Console.WriteLine(i); } } } } [결과] 홀수 : 1 홀수 : 3 홀수 : 5 홀수 : 7 홀수 : 9 10 9 8 7 6 5 4 LYNQ질의 결과는 IEnumerable 형태로 반환되는데 형식매개변수 T는 쿼리식의 select문에 의해 결정된다. 위 뭐리식의 결과 select n은 int형 이므로 IEnumerable가 리턴된다. [예제 2] using System; using System.Linq; using System.Collections.Generic; namespace from { class OnjProfile { public string Name { get; set; } public string Url { get; set; } public int Age { get; set; } } class Onj { 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); //아래처럼 뭐리식을 분리해도 된다. IEnumerable scoreQuery = from score in scores select score; int lowScore = scoreQuery.Min(); Console.WriteLine("최소점수 : {0}", lowScore); OnjProfile[] onjProfile = { new OnjProfile() {Name="ONJSYSTEM", Url="onjsystems.co.kr", Age=7}, new OnjProfile() {Name="오라클자바커뮤니티프로그래밍실무학원", Url="oraclejavacommunity.com", Age=6}, new OnjProfile() {Name="오라클자바커뮤니티", Url="oraclejavanew.kr", Age=16} }; var onjs = from onj in onjProfile where onj.Name.Contains("오") orderby onj.Age select new { Name = onj.Name, Url = onj.Url, Age = onj.Age }; foreach (var o in onjs) Console.WriteLine("{0}, {1}, {2}", o.Name, o.Url, o.Age); } } } [결과] 최고점수 : 99 최소점수 : 59 오라클자바커뮤니티프로그래밍실무학원, oraclejavacommunity.com, 6 오라클자바커뮤니티, oraclejavanew.kr, 16 [출처] 오라클자바커뮤니티 - http://www.oraclejavacommunity.co.kr/bbs/board.php?bo_table=LecCsharp&wr_id=167 오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급 www.oraclejavacommunity.com 평일주간(9:30~18:20) 개강 (5/30)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 (5/30)[기업100%환급]SQL기초에서 Schema Object까지 (6/09)[기업100%환급]PL/SQL,ORACLE HINT,TUNING (6/09)[기업100%환급]안드로이드개발자과정 (6/09)[기업100%환급]Spring ,MyBatis,Hibernate실무과정 (6/16)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍 (6/23)[교육전취업확정,채용예정자교육]Spring,MyBatis,XPlatform실무프로젝트과정 평일야간(19:00~21:50) 개강 (5/29)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 (6/03)안드로이드개발자과정 (6/03)웹퍼블리싱 마스터 (6/10)C#4.0, ADO.NET, Network 프로그래밍 (6/10)Spring3.X, MyBatis, Hibernate실무과정 (6/18)C#,ASP.NET마스터 (6/26)SQL초보에서실전전문가까지 주말(10:00~17:50) 개강 (5/31)Spring3.X, MyBatis, Hibernate실무과정 (5/31)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 (5/31)SQL초보에서실전전문가까지 (5/31)C#,ASP.NET마스터 (5/31)실무예제로 배워보는 jQuery(개발자/디자이너를위한) (5/31)안드로이드개발자과정 주말저녁(18:30~22:20) 개강 (6/21)JAVA,Network&WEB&Framework (6/21)SQL기초에서실무까지

38. C# LYNQ란(링크), 닷넷LYNQ, WHERE, ORDERBY, IEnumerable[닷넷C#교육/ADO.NET강좌/ASP.NET교육잘하는곳/C#,ASP.NET교육추천/닷넷실무교육/.NET,C#/ADO.NET교육/닷넷학원/ASP.NET실무교육]


LYNQ(Language Integrated Query, 링크) C#에 통합된 데이터 질의 기능을 이야기 한다일반적으로 데이터베이스의 데이터를 질의하기 위해 Structured Query Language(SQL)을 사용하지만 이는 DB의 데이터를 다루기 위한 질의어로 객체(컬렉션)를 질의할 수 있는 LYNQ와는 다르다.

LINQ가 쿼리질의할 수 있는 데이터 소스는 상당히 광범위하며그 중 .NET Framework4에서 기본적으로 제공하는 대상은 컬렉션 형태를 가지는 object DataSet, 그리고 관계형 데이터베이스인 SQL 서버와 XML 파일 등 이다.

LYNQ는 표준 쿼리 연산자를 통해 사용되며 문법이 SQL과 비슷한 쿼리 기반 표현식 과 이를 확장 메소드로 구현하여 제공하는 메소드 기반 쿼리가 포함된다.

1. LYNC 기본

FROM

모든 LYNQ 쿼리식은 반드시 FROM절로 시작하는데 데이터원본의 데이터를 나타내는 범위 변수를 FROM절에 기술해야 한다데이터원본 형식은 자유로우며 IEnumerable<T> 인터페이스를 상속하는 형식이어야 한다그러므로 배열이나 컬렉션 객체들은 FROM절에 올 수 있다범위변수는 쿼리변수라고도 하는데 foreach의 반복변수 정도로 보면 된다. Foreach 반복변수와 범위변수가 다른 점은 반복변수가 원본으로부터 데이터를 담고 있지만 범위변수는 데이터를 담고 있지는 않다그러므로 쿼리식 외부에서 선언된 변수에 범위변수의 데이터를 복사할 수는 없다범위변수는 오로지 LINQ 질의 안에서만 통용된다.

LYNQ에서 사용되는 쿼리 식은 from 절로 시작하여 select 또는 group 절로 끝나야 한다첫 번째 from 절과 마지막 select 또는 group 절 사이에는 where, orderby, join, let 및 추가 from 절과 같은 선택적 절 중 하나 이상이 포함될 수 있으며 into 키워드를 사용하여 join 또는 group 절의 결과를 같은 쿼리 식에 있는 다른 쿼리 절의 소스로 사용할 수 있다.

WHERE

필터역할을 하는 연산자, FROM절의 범위변수가 가져야 하는 조건을 where 연산자에 매개변수로 입력하면 LYNQ는 해당 조건에 맞는 데이터만 걸러낸다.


ORDERBY

데이터 정렬을 수행하는 연산자

SELECT

최종 결과를 추출하는 쿼리식의 마침표.


[예제 1 : 배열에서 홀수 값 오름차순, 3보가 큰수 내림차순 추출]

using System;
using System.Linq;
namespace from
{
    class Onj
    {
        static void Main(string[] args)
        {
            int[] num = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

            var onjQuery1 = from n in num             
                         where n % 2 == 1
                         orderby n
                         select n;

            foreach (int i in onjQuery1)
                Console.WriteLine("홀수 : {0}", i);

            // Query __EXPRESSION__.
            IEnumerable<int> onjQuery2 = //query variable
                from n in num //데이터소스  범위변수(필수)
                where n > 3 // 생략가능
                orderby n descending // 내림차순정렬(생략가능)
                select n; //select or group으로 끝나야 한다.

            foreach (int i in onjQuery2)
            {
                Console.WriteLine(i);
            }
        }
    }
}


[결과]

홀수 : 1
홀수 : 3
홀수 : 5
홀수 : 7
홀수 : 9
10
9
8
7
6
5
4


LYNQ질의 결과는 IEnumerable<T> 형태로 반환되는데 형식매개변수 T는 쿼리식의 select문에 의해 결정된다위 뭐리식의 결과 select n int형 이므로 IEnumerable<int>가 리턴된다.


[예제 2]

using System;
using System.Linq;
using System.Collections.Generic;

namespace from
{
    class OnjProfile
    {
        public string Name { getset; }
        public string Url { getset; }
        public int Age { getset; }
    }

    class Onj
    {
        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);


            //아래처럼 뭐리식을 분리해도 된다.
            IEnumerable<int> scoreQuery = from score in scores
                                          select score;
            int lowScore = scoreQuery.Min();
            Console.WriteLine("최소점수 : {0}", lowScore);

            OnjProfile[] onjProfile = {
                                          new OnjProfile() {Name="ONJSYSTEM", Url="onjsystems.co.kr", Age=7},
                                          new OnjProfile() {Name="오라클자바커뮤니티프로그래밍실무학원", Url="oraclejavacommunity.com", Age=6},
                                          new OnjProfile() {Name="오라클자바커뮤니티", Url="oraclejavanew.kr", Age=16}
                                      };

            var onjs = from onj in onjProfile
                       where onj.Name.Contains("")
                       orderby onj.Age
                       select new
                       {
                           Name = onj.Name,
                           Url = onj.Url,
                           Age = onj.Age
                       };

            foreach (var o in onjs)
                Console.WriteLine("{0}, {1}, {2}", o.Name, o.Url, o.Age); 

        }
    }
}


[결과]

최고점수 : 99
최소점수 : 59
오라클자바커뮤니티프로그래밍실무학원, oraclejavacommunity.com, 6
오라클자바커뮤니티, oraclejavanew.kr, 16

댓글 없음:

댓글 쓰기