2016-06-07 2 views
0

궁극적 인 목표는 LINQ 쿼리를 통해 반복하는 것이지만 내 쿼리가 내가 기대하는 것을 수행하고 있는지 확실하지 않습니다.LINQ 쿼리에서 루프를 통해 var?

아래 쿼리는 SQL 서버 DB에서 유일한 이름만을 선택합니다. 그것은 오류를 던지지는 않지만 변수를 통해 반복 구문을 올바른 것으로 보이지 않는 것처럼 그것을 테스트 할 수 없습니다.

var staffNames = sql.Staff_Time_TBLs.Select(item => item.Staff_Name).Distinct(); 

My for 루프는 아래에 있지만 분명히 올바르지 않습니다. 나는뿐만 아니라이 시도 모두 staffNames.lenghtstaffNames[i]

  for (int i = 0; i < staffNames.lenght; i++) 
      { 
       MessageBox.Show(staffNames[i]); 
      } 

에 빨간색 밑줄을 얻고 쿼리의 결과는 운에 올 경우 바로 테스트 할 수 있습니다. 또한 여기뿐만 아니라 item

   foreach (var item in staffNames) 
      { 
       MessageBox.Show(item); 
      } 

enter image description here

여전히

변경 모든 오류,

enter image description here

+0

결과는 무엇입니까? –

+0

@BabakNaffas, 확실하지 않습니다. 결과를 얻기 위해 변수를 반복 할 수 없습니다. – KyloRen

+3

길이가 잘못 입력되어 있습니다. 길이 또는 수로 같아야합니다. – H77

답변

3
트릭을 할 것입니다

간단한 foreach는,

var staffNames = sql.Staff_Time_TBLs.Select(item => item.Staff_Name).Distinct(); 

foreach(var name in staffNames) 
{ 
    MessageBox.Show(name.ToString()); 
} 

또는 :

var staffNames = sql.Staff_Time_TBLs.Select(item => item.Staff_Name).Distinct().ToList(); 

for (int i = 0; i < staffNames.Count; i++) 
{ 
    MessageBox.Show(staffNames[i].ToString()); 
} 

것들에 엔 ote, staffNames는 IQueryable이고 은 열거 형을 열거하지 않으면 (Loop through it)입니다. 따라서 Length 속성이 없거나 indexer[i] 인 이유입니다. 그러나 IQueryableIEnumerable을 구현합니다. 따라서 foreach을 사용하여 반복 할 수 있습니다. 당신이 그것을 반복 시작하는 경우에만 (foreach 또는 ToList() 사용, 데이터베이스 호출을 수행 .

+0

도움을 주셔서 감사합니다. 인내심을 표하십시오. – KyloRen

2

당신이 구현에게 있습니다

그래서위한 IEnumerable 인터페이스 결과를 반환해야 이 인스턴스는 ToList()을 추가 했으므로 결과를 열거하십시오.

var staffNames = sql.Staff_Time_TBLs.Select(item => item.Staff_Name).Distinct().ToList(); 

그래서 당신은 사용하여 반복 할 수있는 사항은 다음과 같습니다

foreach (var item in staffNames) 
    { 
     MessageBox.Show(item.ToString()); 
    } 
+2

IEnumerable을 통해 반복 할 수 있습니다. 목록으로 변환 할 필요는 없습니다. – H77

+0

'IEnumerable' 인스턴스입니다. 인터페이스에서 인스턴스를 가질 수 없습니까? – user3185569

+0

@ user3185569 내 문언에 대해 미안하다. – Sherlock

2

MessageBox 수 만 표시 문자열입니다. 문제는 당신이 그것을 잘못된 매개 변수 유형을주고있는 것입니다. 시도 MessageBox.Show(staffNames[i].ToString());MessageBox.Show(item.ToString());

+0

고맙습니다. 'foreach'가 아닌 루프에 대해서 어떻게할까요? – KyloRen

+0

@KyloRen 그는 이미'staffNames [i] .ToString()' – user3185569

+0

@my bad, 나는 그것을 보지 못했다고 언급했다. 머리를 가져 주셔서 감사합니다. – KyloRen