2013-05-08 4 views
2

나는 단지 "R"을 필터링하는 LINQ 문을 작성하는 것을 시도하고있다선택하고 목록의 일부를 변환하는 LINQ를 사용하는 방법 <T>

{r:1,u:1,v:3}, 
{r:1,u:1,v:5}, 
{r:2,u:1,v:9}, 
{r:3,u:2,v:10} 

이 구조를 가지고 목록 List<UserRoles> roles이 s의 값이 1 & 2이고 "v"의 ints/strings 컬렉션을 반환합니다

이것은 내가하려고하는 것입니다. 내 문제는 내가 변환하려고하는 부분에 있습니다. 해당 "v"s.

List<Int32> = roles.Where(r => r.r == 1 || r.r == 2) 
        .Select(i => new Int32{id = i.v}); 

'id' 알 수없는 오류와 함께 컴파일되지 않습니다. 당신이 int의 목록이 필요한 것처럼

List<Int32> 

{v:3}, 
{v:5}, 
{v:9} 
+0

그건 불가능합니다. ID가있는 정수 또는 객체를 원하십니까? – Silvermind

+1

목록 = roles.Where ...는 변수의 이름을 지정하지 않습니다. –

+0

@user2312219, ** 새로운 Int32 {id = i.v} **에서 무엇을 기대 했습니까? –

답변

5

사운드 :

가 필터링 int의 목록이 경우
List<int> result = roles.Where(r => r.r == 1 || r.r == 2) 
         .Select(i => i.v) 
         .ToList(); 

, 당신이 사용할 수있는

내가 원하는 최종 결과

이있다 Contains 로트를 피하는 방법 || :

var filters = new[] { 1, 2}; 

List<int> result = roles.Where(r => filters.Contains(r.r)) 
         .Select(i => i.v) 
         .ToList(); 

아니면 당신이 {v:9}이 필요합니다, 당신은 var 키워드로 익명 형식를 사용할 수 있습니다

var result = roles.Where(r => filters.Contains(r.r)) 
         .Select(i => new { i.v }) 
         .ToList(); 
1

나는 V 이미 INT 것 같다. 그래서 솔루션으로 간단하게 다음과 같습니다

var result = roles.Where(r => r.r == 1 || r.r == 2).Select(i => i.v).ToList(); 
1

은 당신이 원하는 것은 익명 객체의 배열 인 경우,이 사용

var res = roles.Where(r => r.r == 1 || r.r == 2).Select(i => new{i.v}).ToList(); 

이라는 하나의 속성과 개체의 목록을 생성 할 것 v.

는 정수의 목록을 찾고 있다면, 그리고 v는이 int 원래 클래스에서, 이것을 사용할 수 있습니다 : 당신은 annoymous 유형을 사용하지만 그것의 앞에 Int32을 추가 한

var res = roles.Where(r => r.r == 1 || r.r == 2).Select(i => i.v).ToList(); 
//        note that there's no new here ^^^^^ 
0

하는 불법입니다.

List<Int32> results = roles.Where(r => r.r == 1 || r.r == 2) 
          .Select(i => new { i.v }).ToList();