2010-07-27 4 views
3

스프레드 시트 가져 오기 해당 데이터로 DataTable 개체를 채우고 예상되는 결과를 반환합니다. 나에게 주문 목록을 제공 예상대로DataTable을 LINQ로 변환 : 여러 필드를 쿼리 할 수 ​​없습니다.

public void Something(DataTable dt) 
{ 
    var data = from row in dt.AsEnumerable() 
       select row["Order"].ToString(); 
} 

작품을 다음 내가 쉽게 내가했던 문제 기록을 검색 쿼리 수있는 형식으로이를 넣어 시도

. 그러나이 EnumerableRowCollection 다른 필드를 추가 할 수 없습니다. 다음과 같이 다른 필드를 추가하려고하면 오류를 나에게

public void Something(DataTable dt) 
{ 
    // row["Version"] throws an error on me 
    var data = from row in dt.AsEnumerable() 
       select row["Order"].ToString(), row["Version"].ToString(); 
} 

오류를 제공합니다 : "이미에 사용되는 '행'에 다른 의미를 부여하기 때문 '행'라는 이름의 지역 변수가이 범위에서 선언 할 수 없습니다 '다른'기부 할 '자식'범위 "

나는 별칭을 지정할 필요가 있다고 생각하지만 운이 없다. 내가 여기서 무엇을 놓치고 있니?

+0

원하는 코드를 작성하지 않고 * 실패한 * 코드를 게시하면 도움이됩니다. –

+0

이미 그랬어 :) – Mohgeroth

+0

'행'이라는 변수 이름을 두 번 사용하고 있습니다. 어쩌면 우리가 당신을 도울 수 있도록 실패한 코드의 완전한 예를 게시해야합니다. – sloth

답변

4

그것은 소리. 다음을 시도해보십시오.

public void Something(DataTable dt) 
{ 
    var data = from row in dt.AsEnumerable() 
       select new { 
          Order = row["Order"].ToString(), 
          Something = row["Something"].ToString(), 
          Customer = row["Customer"].ToString(), 
          Address = row["Address"].ToString() 
          }; 
} 

이렇게하면 반복하여 필요에 따라 사용할 수있는 새로운 익명 형식 개체가 생성됩니다. 그러나 함수에서 data을 반환 할 수 있기를 바랍니다. 이 기능이 필요한 경우 익명 형식 대신 사용할 구체적인 형식을 만들어야합니다.

+0

예, 새로운 키워드를 잊어 버리고있었습니다. 아직도 익명의 대표와 그 모든 사람들에게 익숙하지 않은 나는 잊었다. 감사! – Mohgeroth

2

난 당신이 예를 들어,이 쿼리 같은 선택 새를 사용한다고 생각 : 당신은 나쁜 선택 문을 작성하는 것처럼

var q = from o in db.Orders 
     where o.Products.ProductName.StartsWith("Asset") && 
       o.PaymentApproved == true 
     select new { name = o.Contacts.FirstName + " " + 
           o.Contacts.LastName, 
        product = o.Products.ProductName, 
        version = o.Products.Version + 
           (o.Products.SubVersion * 0.1) 
        }; 
0

다음을 원할 수도 있습니다.

var data = from row 
      in dt.AsEnumerable() 
      select new { Order = row["Order"].ToString(), Version = row["Version"].ToString() }; 
관련 문제