1
CSV 파일을 가져와 XML로 변환하는 중입니다. 당신이 중복 등급 (레벨 1, 클래스 0)이 볼 수 있듯이linq에서 xml 쿼리로 고유 값 가져 오기
XML은이
<Root>
<Player index="0">
<Rank>
<Level> A</Level>
<Class> 1</Class>
</Rank>
<TopScores>
<Lives> 1.0</Lives>
<Kills> 0.0</Kills>
<Time> 9:59:55</Time>
</TopScores>
</Player>
<Player index="1">
<Rank>
<Level> A</Level>
<Class> 2</Class>
</Rank>
<TopScores>
<Lives> 1.2</Lives>
<Kills> 0.0</Kills>
<Time> 9:59:59</Time>
</TopScores>
</Player>
<Player index="2">
<Rank>
<Level> A</Level>
<Class> 3</Class>
</Rank>
<TopScores>
<Lives> 1.2</Lives>
<Kills> 0.0</Kills>
<Time>10: 0: 3</Time>
</TopScores>
</Lives>
<Player index="3">
<Rank>
<Level> A</Level>
<Class> 1</Class>
</Rank>
<TopScores>
<Lives> 0.9</Lives>
<Kills> 0.0</Kills>
<Time>10: 0: 8</Time>
</TopScores>
</Player>
</Root>
것 같습니다.
나는 다음과 같은 쿼리를 중복의 수를 얻을 수 있습니다: 중복 '순위'값이있는
//The query below will return the duplicates so we can report the identities
//and the count of the number of duplicates.
var duplicates = playerData.Descendants("Rank")
.GroupBy(c => c.ToString())
.Where(g => g.Count() > 1)
.Select(g => g.First().Value);
내가 모든 '순위'값의 전체 플레이어의 데이터를 얻을 싶지만를, , 나는 마지막 사건을보고 싶다. 위의 XML 데이터의 경우 3 세트의 플레이어 데이터 만 반환해야하며 복제본이있는 경우 최신 시간 또는 ID가있는 복제본이어야합니다.
내가 시도 이렇게하려면 다음을 수행var uPlays = playerData.Descendants("Player").Descendants("Rank")
.GroupBy(z => z.ToString())
.Select(b => b.Ancestors().First());
이이 순위의 고유 한 값 나에게 모든 선수 데이터를 제공하지만, 물론 그것이 처음 발견 된 인스턴스가 날 수 있습니다. 나는 단지 .First()
에서 .Last()
으로 변경하겠다고 생각했지만 이것은 처음 값이 세 번 중복 된 것을 보여줍니다.
감사 라파엘, 내가 XElement를 함께 일하고이
또는 사용하여 코드 같은 것을 시도 할 것이다 . 두 번째 제안은 매력처럼 작동합니다! 물론 내가 바꿨지. 우선. 마지막.이 작품. 나는 무슨 일이 일어나고 있는지 더 잘 이해하기를 바란다. 누구나 좋아하는 참조가 있습니까? – maxthestork