2016-12-01 1 views
0

선택 쿼리에서 "새"를 "새"를 사용하고 사용하지 않을의 차이 무엇 :다음과 같이 나는이 개 질문이

  • Select(a => a.IsAdmin)
  • Select(x => new {x.IsAdmin})

... 그리고 두 가지 질문이 있습니다.

  • 둘 사이의 차이점은 무엇입니까?
  • 언제 사용해야하며 언제 'new'키워드를 사용해야합니까?
+0

첫 번째는 평가할 개체를 기반으로 한'IsAdmin'의 현재 값을 반환합니다. 두 번째는'IsAdmin'의 새로운 객체를 인스턴스화하고 기본값을 반환합니다. –

답변

6

Select(a => a.IsAdmin) 

는 한편

Select(x => new {x.IsAdmin}) 

(속성 IsAdmin가 bool 타입 인 것으로 가정) IEnumerable<bool>가를 반환 반환 IEnumerable<*anonymous type*> 개체의 속성이인 익명 형식이됩니다. 타입 bool

+1

거의. 후자는'IEnumerable '을 반환하는데,'T'는 익명의 타입입니다. – hvd

+0

글쎄, 그것을 쓰는 방법에 대해 조금 생각 ... 형식이 알려져 있기 때문에 그것은 실제로 T가 아닙니다; 그것은 "템플릿"유형이 아닙니다. 사물 대신 T를 쓰는 것이 더 명확하다고 생각하십니까? – mortb

+0

개체에서 * 익명 형식으로 변경했습니다. * – mortb

4

의후자는 각 항목에 대해 이렇게 동등한 효과적인 것을 고려해

IsAdmin의 대상 속성 이름
var output = new { IsAdmin = input.IsAdmin }; 

이므로 :

var output = new { input.IsAdmin }; 

동의어로서 지정되지 않은 경우 소스에서 유추됩니다. 각 항목 items의 요소의 IsAdmin의 값입니다 - 그래서 ...

items.Select(a => a.IsAdmin) 

이것은 bool의 열거를 돌려줍니다.

샘플 반환 값 : [True, False, True, True, False].

items.Select(a => new {a.IsAdmin}) 

이 각 개체 값 items의 항목의 대응 IsAdmin의 속성을 IsAdmin 인 특성을 갖는다 익명 object,의 열거를 반환한다.

샘플 반환 값 : [{ IsAdmin: True }, { IsAdmin: False }, ...].

귀하의 재량에 따라 사용할 수 있습니다. 일반적으로 후자는 단일 값이 아닌 각 항목에 대해 여러 속성을 반환하려는 경우에 사용합니다.

1

는 단순히 단순히 기본 데이터 형식의 목록을 반환하는 첫 번째 문에서

, 생각합니다. 그것은 int, bool 일 수 있습니다. string은 IsAdmin 유형에 따라 다릅니다.

그리고 두 번째 것은 IsAdmin 속성을 사용하여이 컬렉션을 반환하는 익명 형식의 개체를 만듭니다.

관련 문제