2014-09-17 2 views
-1

저는 foreach 문을 사용했으며 대신 LINQ를 사용하도록 제안했습니다. 이것은 내가 생각해 냈지만 오류가 발생했습니다. 누군가가 나에게이와 손 줄 수 :C# foreach를 LINQ 식으로 변환

질문 1 : foreach 문 :

List<string> captured = new List<string>(); 
foreach (DataRow row in table.Rows) 
    captured.Add(row["ID"].ToString()); 

시도 LINQ 문

var captured2 = table.Rows.ToList().ForEach(row => { captured.Add(row["ID"].ToString());}); 

질문 2 : 또한

전 이 복합 문을 너무 가지고 있는데 어떻게해야하는지에 대한 단서가 없습니다. LINQ 문을

 List<string> captured = new List<string>(); 
     foreach (DataRow row in table.Rows) 
     { 
      foreach (DataColumn col in table.Columns) 
      { 
       if (!col.ToString().Equals("Name") || !col.ToString().Equals("ID")) 
        captured.Add(row[col.ToString()].ToString()); 
      } 
     } 

감사

+1

그리고 어떤이의 그 오류의 메시지 ... –

+0

나는 그것이 어떻게 떠날 것입니다. 더 읽기 쉽게 보입니다. – Reniuz

+0

새로운 질문이있는 경우 새로운 질문을해야합니다. – JLRishe

답변

1

:

하지만, 훨씬 더 좋은 방법은이 작업을 수행하는 것입니다

var captured = (from DataRow row in table.Rows from DataColumn col in table.Columns where !col.ToString().Equals("Name") || !col.ToString().Equals("ID") select row[col.ToString()].ToString()).ToList(); 
0

나는 그 ReSharper에서이 무엇을 의미하는지 생각하지 않습니다를 만들 수 있습니다.

더 나은의 LINQ 방법은 다음과 같습니다

var captured2 = table.Rows.Cast<DataRow>().Select(row => row["ID"].ToString()).ToList(); 

내가 당신을 위해 그렇게 번역하지 않은 놀랍군요 - 나는 ReSharper에서이 .ForEach() 전화로 foreach 번역 본 적이 없습니다.

+1

'DataRowCollection'은'IEnumerable '을 구현하지 않으므로'.Cast ()'없이는 컴파일되지 않습니다. – JLRishe

+0

@JLRishe 감사합니다. –

+0

@JLRishe 당신이 맞을 때 OP의 코드도'table.Rows.ToList()'를 컴파일하지 않을 것이라고 생각합니다 –

2

Resharper가 LINQ를 대신 사용할 것을 제안 할 때 커서를 squiggly에 놓고 Alt-Enter를 누르십시오. Resharper가 해결할 것입니다. 단축키가 작동하지 않는다면, 불규칙하게 마우스를 가져 가면 Resharper가 코드를 수정하도록 지시 할 수있는 아이콘이 나타납니다.

실제로 이것은 모든 Resharper 제안에 적용됩니다. 나는 스스로 해결할 수 없다는 제안을 한 번도 만난 적이 없다.

+0

OMG 나는 당신이 그렇게 할 수 있는지 몰랐습니다 !! 대단히 감사합니다. –

+0

@ civic.sir 문제가 없습니다. 문제를 해결 한 답을 표시하십시오. StackOverflow가 콘텐츠를 구성하는 데 도움이됩니다. –

+0

나는 노력하고있다. 그러나 나는 적어도 내가하기 전에 10 분을 기다려야한다. 그러나 나는 당신의 대답에 반드시 표시 할 것입니다. 감사합니다 –

0

ForEach는 IEnumerable을 반환하지 않습니다. , D

List<string> captured = (from DataRow row in table.Rows select row["ID"].ToString()).ToList(); 
3

갈 수 있어요 여기에 어떻게 할 것입니까?

var values = (from DataRow row in table.Rows 
      from string col in new[] {"Name", "ID"} 
      select row[col].ToString()).ToList(); 

원하는 항목을 알고 있으므로 모든 항목을 반복 할 필요가 없습니다.

var captured = (from DataRow row in table.Rows select row["ID"].ToString()).ToList(); 

두 번째 질문 : 내 ReSharper에서에서 Question1

var values2 = (from DataRow row in table.Rows 
       select new 
       { 
        Name = row["Name"].ToString(), 
        ID = row["ID"].ToString() 
       }).ToList(); 
0

당신은 정말 별도의 질문으로 질문 2를 요청해야합니다 :

는 captured2을 할당하지 말고 당신은 내가 나를 위해 그것을 할 ReSharper에서를 사용

관련 문제