2014년 11월 20일 목요일

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

38. C# LYNQ란(링크), 닷넷LYNQ, WHERE, ORDERBY, IEnumerable


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






 [100%환급,개발자전문]빅데이터/SQL/자바/스프링/안드로이드/닷…오라클자바…12-272554
 [채용확정무료교육]오라클자바개발잘하는신입뽑기2개월과정,교육…오라클자바…12-111863
53 [평일100%환급7건]Spring,자바&JSP,안드로이드,웹퍼블리싱,C#닷… 오라클자바…03-151674
52 [주말]C#,ASP.NET마스터 오라클자바…01-311768
51 [기업100%환급,평일주간]SQL기초에서스키마오브젝트,PLSQL,힌트… 오라클자바…01-312543
50 [평일주간야간,주말]C기본&자료구조,알고리즘 오라클자바…01-311402
49 [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정-… 오라클자바…01-191710
48 [평일야간,주말]안드로이드개발자과정(Android기초실무) 오라클자바…01-111592
47 [평일야간,주말주간야간]JAVA,Network&JSP&Spring,MyBatis,Hiber… 오라클자바…01-032109
46 [100%환급,개발자전문]빅데이터/SQL/자바/스프링/안드로이드/닷… 오라클자바…12-272554
45 [평일주간]NoSQL,MongoDB,빅데이터기초과정 오라클자바…12-191820
44 [평일주간야간, 주말]웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX… 오라클자바…12-141803
43 [채용확정무료교육]오라클자바개발잘하는신입뽑기2개월과정,교육… 오라클자바…12-111863
42 [평일주간]빅데이터하둡기초과정(BigData Hadoop) 오라클자바…12-091462
41 [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 오라클자바…12-011689
40 [기업100%환급]오라클&자바웹스프링신입과정3주(SQL,JAVA,JSP,Se… 오라클자바…12-011862
39 [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) 오라클자바…12-011338

댓글 없음:

댓글 쓰기