첫번째 파라미터, 두번째 파라미터, 세번째 파라미터가 있는데
첫번째 파라미터에서는 참조할 메서드의 이름.. 근데 일치하지 않으면 에러가 뜨기 때문에 nameof 메서드를 적극이용한다.
두번째 파라미터는 반환할 메서드를 입력하면 된다.
세번째 파라미터에서는 주로 생성한 결과물의 엔티티 예를 들어서 result.Entity 이런식으로 하는데 보통 POST 요청에서 생성된 엔티티의 결과를 보여줄 때 유용하다.
var result = await _context.SaveChangesAsync(); 사실 이런 코드가 있다고 치면 중간에 한 단계가 생략되어있다.
Task task = _context.SaveChangesAsync();
var result = task 실행
이런식이다. await은 그냥 받아서 바로 실행시키는 것 뿐이다.
파일스트림
System.IO.FileStream (class)
Select()
Where()
Distinct()
Empty()
DefaultIfEmpty()
Contains()
single() / singleOrDefault()
First() / FirstOrDefault()
All()
Any()
ToDictionary()
ThenBy() / ThenByDescending()
OrderBy() / OrderByDescending()
Reverse()
Average()
Union()
Intersect()
*** GroupJoin( param1, param2, param3, param4 )
1. param1 : 결합할 두번째 컬렉션
2. param2 : 첫번째 컬렉션의 키 선택자
3. param3 : 두번째 컬렉션의 키 선택자
4. resultSelector : 결과 선택자
사용자 정의 타입으로 원하는 것만 골라서 쏙쏙 쓰는 걸 갖다가 다이나믹 링큐라고 한다고 한다.
보통 이는 var linqResult = from ~~ in ~~
select( x => new { ~~} )
같이 작성하지만, 쿼리식의 형을 var가 아니라 dynamic으로 정해주어야 할 때가 있다. 이것은 클래스 안
일단 형을 정해주지 않으면 인텔리센스에서 어떠한 도움도 받을 수 없다. 하지만, 형에서 자유로워지는 것은 좋긴하다. (디버깅해서 형을 확인한다음 정해줘도 괜찮긴하다 )
람다에서 var lambdaResults = data.Where(condition);
보통 안에서 우리는 x => x > 3으로 하지만
이건 익명함수 즉 public bool condition(Book b){
return b.quantity >3 }
이런게 들어가 있는 셈
from element in data
where element.quantity > 3
select element
이 쿼리 표현식과 같은 의미를 가지지만 내부적으로는 동작이 완전히 다르다.
SQL 식과 , 함수형 전개의 차이..