2012-12-18 5 views
0

XDocument 라이브러리를 사용하여 XML 문서를 읽고 C#의 LINQ 목록을 쿼리합니다. 나는 암묵적인 var에 무의미한 목록을 반환합니다. 임의의 유형은 단순한 구조입니다. 내가 뭘 잘못하고 있는지 잘 모르겠지만, 이미 정의한 클래스 목록으로 반환하고 싶지만이 익명 형식을 사용자 정의 클래스로 변환하는 중 오류가 발생합니다. 이것에 대한 명백한 것이 빠져 있습니다. 여기에 동적 타이핑을 사용하고 싶지 않습니다.목록을 사용자 지정 개체로 변환

public class CustomClass 
    { 
     public string id { get; set; } 
     public int fileName { get; set; } 
    } 

XDocument optXML = XDocument.Load(pathName); 

var optInput = (from item in optXML.Descendants("Group") 
        select new 
        { 
         id = (int)item.Attribute("ID"), 
         fileName = (string)item.Attribute("FileName") 
        }).ToList(); 
foreach (CustomClass item in optInput) 
     { 
      Console.WriteLine(item.id); 
     } 

답변

1

대신 사용자 정의 유형의 var을 사용할 수 있습니다, 그것은 당신의 투영 컴파일러에 의해 생성 된 유형이 될 새로운 사용합니다.

foreach (var item in optInput) 
{ 
    Console.WriteLine(item.id); 
} 

또는 당신은 당신의 클래스 즉 CustomClass 대신 익명 형식을 사용하여 객체를 생성 할 수 있습니다. 난 당신이 오히려 var을 변경할 특별한 이유가 없다

List<CustomClass> optInput = (from item in optXML.Descendants("Group") 
       select new CustomClass 
       { 
        id = (int)item.Attribute("ID"), 
        fileName = (string)item.Attribute("FileName") 
       }).ToList(); 

익명 객체보다 CustomClass에 투사 할 생각

public class CustomClass 
    { 
     public string id { get; set; } 
     public int fileName { get; set; } 
    } 

XDocument optXML = XDocument.Load(pathName); 

var optInput = (from item in optXML.Descendants("Group") 
        select new CustomClass() 
        { 
         id = (int)item.Attribute("ID"), 
         fileName = (string)item.Attribute("FileName") 
        }).ToList(); 
foreach (CustomClass item in optInput) 
     { 
      Console.WriteLine(item.id); 
     } 
+0

("그룹")) item.Attribute ("ID")를 새로운 { ID = (INT를 선택 optXML.Descendants의 항목에서 (목록 = 같은 사용자 정의 클래스에 직접 가져올 수있는 방법이 있나요, fileName = (문자열) item.Attribute ("FileName") }). ToList(); – JBone

+0

답변을 업데이트했습니다. – Adil

4

List<CustomClass>에 코드를 작성하십시오. 실제로 얻은 것을 보여주기 위해 완료되었습니다. 지.

2

: 대신 new{}new CustomClass() 선택 선택

var optInput = (from item in optXML.Descendants("Group") 
       select new CustomClass 
       { 
        id = (int)item.Attribute("ID"), 
        fileName = (string)item.Attribute("FileName") 
       }).ToList(); 
1

쿼리에서 선택한 익명 형식이 CustomClass가 아니기 때문에이 오류가 발생합니다. 당신은 단순히 너무

select new CustomClass { id = , fileName = } 

같은에서는 CustomClass 자체를 선택하거나 foreach는

foreach (var item in optInput) 
    { 
     Console.WriteLine(item.id); 
    }  

내부 그래서 같이 anomymous 유형을 사용하고 그것을 위해 전체 인텔리를 얻을 수 있습니다 할 수 있습니다.

관련 문제