2014-03-06 1 views
1

사용자가 액세스 할 수있는 책 목록을 나타내는 XML 파일이 있습니다. 내가 한 번 XML의 각 책을 얻기 위해 노력하고 XElement를 이름 xBooksLINQ to XML, VB.NET에서 고유 노드 가져 오기

<Book Bookid="1" BookName="Book1" /> 
<Book Bookid="1" BookName="Book1" /> 
<Book Bookid="2" BookName="Book2" /> 
<Book Bookid="1" BookName="Book1" /> 

.

Dim DistinctBooks = (From item In xBooks.Elements("Book") Select item).Distinct() 

그 라인은 아무 것도하지 않는 것처럼 보입니다. DistinctBooks의 값은 xBooks와 같습니다.

나는 해결책을 찾았지만, LINQ를하고있는 모든 사람들이 C#에서 그것을하고 있다고 보인다. C#에서 다른 게시물을 찾았음에도 불구하고 C#에서 VB로 올바르게 변환되지 않았거나 VB에서 다르게 작업합니다. 누구든지 VB에서 작동하도록 올바른 방향으로 날 괴롭힐 수 있습니까?

감사합니다.

답변

0

이 선언되었다고 가정 :

Dim xBooks = <books> 
       <Book Bookid="1" BookName="Book1"/> 
       <Book Bookid="1" BookName="Book1"/> 
       <Book Bookid="2" BookName="Book2"/> 
       <Book Bookid="1" BookName="Book1"/> 
      </books> 

난 당신이 이런 식으로 뭔가를 찾고 생각 : 모든 노드이기 때문에 당신을 위해 작동하지 않았다 왜

Dim DistinctBooks = From item In xBooks.Elements("Book") 
        Select bookid = item.Attribute("Bookid").Value, 
          bookName = item.Attribute("BookName").Value 
        Distinct 

입니다 구현하는 모든 속성 집합을 고려하면 다릅니다. 위와 함께 고유 한 키의 일부로 필요한 속성을 지정합니다. 또한 여러 스타일의 LINQ (쿼리 및 기능)를 결합 할 필요가 없다는 것을 알게되면 Distinct이라는 단어를 쿼리의 일부로 사용할 수 있습니다.

Dim DistinctBooks = From item In xBooks.<Book> 
        Select bookid = [email protected], 
          bookName = [email protected] 
        Distinct 
+1

:

난 그냥 지금 내 VB.NET 프로젝트 작업이 LINQ 람다 식을 얻었다. 테스트 용으로 제거한 다른 속성과 자식 노드를 XML과 select로 다시 추가했습니다. 여전히 작동합니다. 정말 고마워! – SamoBellows

0

당신이 더 간결한 구문을 사용하여 고려하는 것이 좋습니다 VB로, Neolisk의 정답 @에 확장 'lamba'대신 'sql'표현식을 사용하십시오. (윈도우 7, vs15) 완벽하게 작동

Dim myxdoc As XDocument = XDocument.Load(xdocfilepath) 
Dim newlist = myxdoc.Root.Descendants.GroupBy(Function(x) x.Name).Select(Function(x) x.First).Where(Function(x) x.Name = "partNumber").ToList 

For Each item In newlist 
    Debug.Print(item.Value.ToString()) 
Next 
0

몇 년 후반이 스레드에 ..하지만

나는 그가 요구하고있다 믿습니다