280 likes | 633 Views
C#. O/R 디자이너 - LINQ 이용. LINQ. LINQ(Language INtegrated Query) ; 닷넷 프로레임워크 3.5 에서 지원하는 데이터 다루는 방법 언어에 독입적인 쿼리문 ; 언어 ( 쿼리 대상인 데이터 소스 , 쿼리 실행 언어 ) 쿼리 대상 : SQL 테이블 , XML 문서 , 오브젝트 , 텍스트파일 데이터 소스에 따라서 문법이 다름 ; 데이터 베이스 (SQL), XML( XPath ). LINQ. LINQ 범주 LINQ to Object
E N D
C# O/R 디자이너- LINQ 이용
LINQ • LINQ(Language INtegrated Query); 닷넷프로레임워크3.5에서 지원하는 데이터 다루는 방법 • 언어에 독입적인쿼리문; 언어(쿼리 대상인 데이터 소스, 쿼리 실행 언어) • 쿼리 대상 : SQL 테이블, XML 문서, 오브젝트, 텍스트파일 데이터 소스에 따라서 문법이 다름; 데이터 베이스 (SQL), XML(XPath)
LINQ • LINQ 범주 • LINQ to Object • LINQ to DataSet • LINQ to SQL • LINQ to Entities • LINQ to XML
LINQ의 위치 언어1 VB C# 언어2 LINQ to ADO.NET LINQ to Object LINQ to Object LINQ to Object LINQ to Object LINQ to Object Object RDB XML
LINQ의 장점 • 간결한 구문으로 쿼리 방식을 간소화한다. 꼭 필요한 지시 사항만 밝힘으로써 원하는 데이터를 간편하게 얻을 수 있다. • 데이터 소스에 상관없이 일관된 쿼리 문법이 적용된다. 그 자체가 통합을 지향하고 있으므로 일관적이다. 한번 배우면 똑같은 문법을 여러 대상에서 사용 가능하다. • 객체 지향적이다. 관계형 데이터베이스는 객체 지향과 거리가 멀지만 LINQ 를 쓰면 객체 지향의 여러 가지 이점을 취할 수 있다. • 강력한 타입을 지원하며 모든 에러를 컴파일 중에 점검할 수 있어 개발 속도가 빨라지고 안정성도 확보된다. 인텔리센스와 디버거의 도움도 받을 수 있다.
메모리 내의 컬렉션을 대상으로 LINQ 실습 정수 배열 ar에서 3의 배수 출력 using System; using System.Collections.Generic; using System.Linq; class CSTest { static void Main() { int[] ar = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var Query = from n in ar where (n % 3 == 0) select n; foreach (int k in Query) { Console.WriteLine(k); } } } from 순회변수 in 데이터 소스
메모리 내의 컬렉션을 대상으로 LINQ 실습 파일 목록 출력 using System; using System.Collections.Generic; using System.Linq; using System.IO; class CSTest { static void Main() { var Files = from f in Directory.GetFiles("c:\\") select f; foreach (var f in Files) { Console.WriteLine("이름 : " + f); } } }
메모리 내의 컬렉션을 대상으로 LINQ 실습 쿼리 표현식 where orderby let select group from
메모리 내의 컬렉션을 대상으로 LINQ 실습 using System; using System.Collections.Generic; using System.Linq; class People { public People(string aName, intaAge, boolaMale) { Name = aName; Age = aAge; Male = aMale; } public string Name; public int Age; public bool Male; } class CSTest { static void Main() { People[] arPeople = { new People("정우성", 36, true), new People("고소영", 32, false) ,new People("배용준", 37, true), new People("김태희", 29, false) }; // IEnumerable<People> Query = from p in arPeople select p; // 아래 문장과 같은 결과 var Query = from p in arPeople select p; foreach(People k in Query) { Console.WriteLine("이름 : " + k.Name + ", 나이 : " + k.Age+ ", 남자 : " + k.Male); } } }
Windows Forms 응용프로그램 선택 확인 클릭
1. LINQ to SQL 클래스 선택 2. 추가 클릭
1. 추가된 클래스 확인 2. 엔터티 클래스 창 3. 메서드 창
DataClasses1.designer.cs 더블 클릭 후 자동 작성된 소스 확인 : Address 테이블 부분)
MSSMS 에서 저장 프로시저 만들기 ADOTest데이터베이스 클릭 새 쿼리 클릭 오른쪽 텍스트 카피하여 새 쿼리창에서 실행 CREATE PROCEDURE myProc AS SELECT * FROM Address WHERE Name = '홍길동'; exec myProc;
저장 프로시저(myProc)를 메서드 창에 드레그 비쥬얼 스튜디오 창
DataClasses1.designer.cs 더블 클릭 생성된 저장 프로시저(dbo.myPorc부분) 확인
Forms1.cs 더블 클릭 윈도우 폼 더블 클릭
코딩할 내용 DataClasses1DataContext db = new DataClasses1DataContext(); System.Data.Linq.Table<Address> Address = db.GetTable<Address>(); var Query = from A in Address select A; foreach (Address k in Query) { listBox1.Items.Add(string.Format("이름 : " + k.name + ", 주소 : " + k.addr)); } db.myProc();