C# Lambda && Linq

12032 단어 lambda
  • Lambda 표현 식 은 C \ # 3.0 에 추 가 됩 니 다. 익명 함수 입 니 다. 의뢰 나 표현 식 트 리 형식 을 만 들 수 있 습 니 다. 연산 자 는 = > 이 고 'goes to' 로 읽 을 수 있 습 니 다. = > 왼쪽 은 변수 이 고 오른쪽 은 표현 식 입 니 다. 변수 유형 은 자동 으로 유도 할 수 있 습 니 다
  • Linq 조회 작업 은 세 가지 서로 다른 조작 으로 구성 된다. 예시 코드:
  • 데이터 원본 가 져 오기, 데이터 원본 은 Xml, SQL 데이터베이스, Ado. net 데이터 세트,. Net 집합 중의 데이터 등
  • 조 회 를 만 들 었 지만 조 회 를 실행 하지 않 았 습 니 다. 하나의 변수 로 조 회 를 저장 합 니 다. 조회 표현 식 은 세 개의 문 구 를 포함 합 니 다. 조 회 를 실행 합 니 다. foreach 문 구 를 사용 하여 순환 적 으로 조회 변 수 를 방문 할 때 만 조 회 를 실행 합 니 다. Count, Max, Average, First 를 사용 하면 바로 조 회 를 실행 합 니 다.
  • from: 지 정 된 데이터 원본
  • where: 지정 한 filter
  • select: 반환 데이터 지정

  • [TestClass] public class XmlLinqTest { private static XElement doc; [ClassInitialize] public static void Initialize(TestContext context) { doc = XElement.Load("Books.xml"); } [TestMethod] public void QueryBook_Id_ReturnBook() { IEnumerable<XElement> books=from el in doc.Elements() where el.Attribute("id").Value.Equals("1") select el; XElement book = books.First(); Assert.AreEqual(book.Attribute("id").Value, "1"); Assert.AreEqual(book.Attribute("name").Value,"Linq"); Assert.AreEqual(book.Attribute("author").Value,"Tom"); } }

     
    <?xml version="1.0" encoding="utf-8" ?> 
    
    <Books>
    
      <Book id="1" name="Linq" author="Tom" />
    
      <Book id="2" name="Lambda" author="Jerry" />  
    
    </Books>

  • 검색 키워드: 검색 문법 은 컴 파일 할 때 방법 으로 호출 됩 니 다. 이 방법 들 은 standard query operators 라 고 불 립 니 다. where, Select, Group By, Join, Max, Average 등 (모두 확장 방법) 을 포함 하여 검색 문법 을 대체 할 수 있 습 니 다.
  • orderby: 되 돌아 오 는 데 이 터 를 정렬 합 니 다
  • group: 지정 한 키 를 누 르 면 결 과 를 그룹 으로 나 눌 수 있 습 니 다. 그룹 결 과 를 조작 하려 면 into 를 사용 하여 사용 할 수 있 는 검색 어 를 만 들 수 있 습 니 다
  • 예시 코드:
    // custQuery     IEnumerable<IGrouping<string, Customer>>
    // IGrouping group.. by
    var custQuery = from cust in customers group cust by cust.City into custGroup where custGroup.Count() > 2 orderby custGroup.Key select custGroup;

  • join: 연결, join 문 구 는 두 개의 데이터 소스 를 입력 으로 받 아들 이 고 실행 등 연결 만 할 수 있 습 니 다. 즉, 두 키 간 의 똑 같은 관 계 를 바탕 으로 일치 할 수 있 습 니 다. 다음 과 같은 몇 가지 로 나 눌 수 있 습 니 다.
  • inner join:
  • group join: into 문 구 를 포함 하여 하나의 그룹 서열 이 생 길 것 입 니 다. 이 서열 은 왼쪽 데이터 원본 의 요 소 를 오른쪽 데이터 원본 의 하나 또는 여러 요소 와 연결 시 킵 니 다. 오른쪽 에 왼쪽 요소 와 일치 하 는 요소 가 없 으 면 빈 집합 이 생 길 것 입 니 다
  • left outer join: group join 에서 DefaultEmpty 방법 을 사용 하여 일치 하지 않 을 때 왼쪽 요소 에 대응 하 는 요 소 를 지정 합 니 다. 그러면 왼쪽 데이터 소스 의 모든 요 소 는 대응 하 는 집합 이 있 습 니 다
  • 예시 코드:
    <?xml version="1.0" encoding="utf-8" ?>
    
    <Authors>
    
      <Author id="1" name="Tom" />
    
      <Author id="2" name="Jerry"/>
    
      <Author id="3" name="Jack"/>
    
    </Authors>
    
    
    
    <?xml version="1.0" encoding="utf-8" ?> 
    
    <Books>
    
      <Book id="1" name="Linq" authorId="1" />
    
      <Book id="2" name="Lambda" authorId="2" />
    
      <Book id="3" name="C#" authorId="1" />
    
    </Books>

     
    / / Books Group 은 Books xml 에서 조건 을 만족 시 키 는 element 의 집합 입 니 다.
    var group = from author in authors.Elements()
    
                                join book in books.Elements() on author.Attribute("id").Value
    
                                equals book.Attribute("authorId").Value into BooksGroup
    
                                where author.Attribute("id").Value.Equals("1")
    
                                select new { Author = author.Attribute("name").Value, authorBooks = BooksGroup };


  • select: 검색 결과 생 성
  • let: 새로운 변 수 를 사용 하여 하위 표현 식 의 결 과 를 저장 합 니 다. 뒷부분 에서 계속 사용 할 수 있 습 니 다
  • int[] numbers = { 5, 10, 8, 3, 6, 12}; //Query syntax:
    
            IEnumerable<int> numQuery1 = 
    
                from num in numbers where num % 2 == 0
    
                orderby num select num; //Method syntax:
    
            IEnumerable<int> numQuery2 = numbers.Where(num => num % 2 == 0).OrderBy(n => n);

  • 좋은 웹페이지 즐겨찾기