获取元素的伯爵那里的候选人赢得了 [英] Get the Count of Elements where candidate has won

查看:137
本文介绍了获取元素的伯爵那里的候选人赢得了的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

LINQ2Xml: 我想获得元素,其中的候选人赢得了在每个省的数量。我需要一些帮助。

 < Pronvice_Data>
    < Pronvice> PronviceA< / Pronvice>
    < Registered_Voters> 115852< / Registered_Voters>
    &其中; Sam_Kea> 100℃/ Sam_Kea>
    &其中;杰杰奥> 500℃; /杰杰奥>
    &其中; john_doe即> 400℃/ john_doe即>
< / Pronvice_Data>

< Pronvice_Data>
    < Pronvice> PronviceA< / Pronvice>
    < Registered_Voters> 25852< / Registered_Voters>
    &其中; Sam_Kea> 200℃/ Sam_Kea>
    &其中;杰杰奥> 100℃/杰杰奥>
    &其中; john_doe即大于300&所述; / john_doe即>
< / Pronvice_Data>

< Pronvice_Data>
    < Pronvice> PronviceC< / Pronvice>
    < Registered_Voters> 317684< / Registered_Voters>
    &其中; Sam_Kea> 1000℃; / Sam_Kea>
    <杰杰奥> 1200 LT; /杰杰奥>
    &其中; john_doe即> 190℃; / john_doe即>
< / Pronvice_Data>
 

预期成果:

 候选人|赢得
杰杰奥2
john_doe即1
Sam_Kea 0
 

解决方案

OK,我不喜欢的数据格式,所以我改成了这样:

 <根>
  <考生>
    < Sam_Kea />
    <杰杰奥/>
    < john_doe即/>
  < /考生>

  <各省>
    <省名='ProvinceA'Registered_Voters ='115852'>
      <考生姓名='Sam_Kea的投票=100/>
      <考生姓名='杰杰奥的投票='500'/>
      <考生姓名='john_doe即'票=400/>
    < /省>

    <省名='ProvinceB'Registered_Voters ='25852'>
      <考生姓名='Sam_Kea的投票=200/>
      <考生姓名='杰杰奥的投票=100/>
      <考生姓名='john_doe即'票=300/>
    < /省>

    <省名='ProvinceC'Registered_Voters ='317684'>
      <考生姓名='Sam_Kea的投票=1000/>
      <考生姓名='杰杰奥的投票=1200/>
      <考生姓名='john_doe即'票='190'/>
    < /省>
  < /省>

< /根>
 

这是LINQ到XML code我用:

 公共无效的run()
{
    字符串fileToLoad = this.GetType()名+的.xml。

    的XElement根= XElement.Load(fileToLoad);

    // ================================================ =======
    的System.Console.WriteLine(\ nCandidates:);
    在root.Element(申请人)VAR allCandidates =从C。元素()
        选择c.Name;

    的foreach(VAR d在allCandidates)
        Console.WriteLine({0},d.ToString());


    // ================================================ =======
    的System.Console.WriteLine(在每个省考生的\ n已接收:);

    VAR S1 =从p在root.Element(省)。元素()
        选择新
            {
                箴=(字符串)p.Attribute(姓名),
                NumCandidates = p.Elements(候选人)。COUNT()
            };

    的foreach(VAR d在S1)
        Console.WriteLine({0},d.ToString());


    // ================================================ =======
    的System.Console.WriteLine(\ nCandidate与多数选票:);
    VAR S2 =从p在root.Element(省)。元素()
        让maxVotes =(从C在p.Elements(候选人)选择C)
                       的.max(X =>((INT)x.Attribute(内容)))

        选择新
            {
                箴=(字符串)p.Attribute(姓名),
                选民=(INT)p.Attribute(Registered_Voters),
                候选=(从C在p.Elements(候选人)
                             选择C)。凡(X =>((INT)x.Attribute(内容))== maxVotes)
                    。首先()。属性(名称)。值
            };

    的foreach(VAR d在S2)
        Console.WriteLine({0},d.ToString());


    // ================================================ =======
    的System.Console.WriteLine(\ nCandidates和省#荣获:);

    VAR S4 =从能在allCandidates
        让数=(从对在S2,其中p.Candidate ==可以选择P).Count之间的()
        排序依据计数下降
        选择新{候选人=可以,NumberOfProvincesWon =计数};

    的foreach(VAR d在S4)
        Console.WriteLine({0},d.ToString());
}
 

输出:

 考生:
  Sam_Kea
  杰杰奥
  john_doe即

在每个省考生数:
  {箴= ProvinceA,NumCandidates = 3}
  {箴= ProvinceB,NumCandidates = 3}
  {箴= ProvinceC,NumCandidates = 3}

与候选人得票最多:
  {箴= ProvinceA,投票人= 115852,候选人=杰杰奥}
  {箴= ProvinceB,投票人= 25852,候选人= john_doe即}
  {箴= ProvinceC,投票人= 317684,候选人=杰杰奥}

考生和省#荣获:
  {候选人=杰杰奥,NumberOfProvincesWon = 2}
  {候选人= john_doe即NumberOfProvincesWon = 1}
  {候选人= Sam_Kea,NumberOfProvincesWon = 0}
 

LINQ2Xml: I would like to get the count of elements where candidate has won in every province. I need some help.

<Pronvice_Data>
    <Pronvice>PronviceA</Pronvice>
    <Registered_Voters>115852</Registered_Voters>
    <Sam_Kea>100</Sam_Kea>
    <Jeje>500</Jeje>
    <John_Doe>400</John_Doe>
</Pronvice_Data>

<Pronvice_Data>
    <Pronvice>PronviceA</Pronvice>
    <Registered_Voters>25852</Registered_Voters>
    <Sam_Kea>200</Sam_Kea>
    <Jeje>100</Jeje>
    <John_Doe>300</John_Doe>
</Pronvice_Data>

<Pronvice_Data>
    <Pronvice>PronviceC</Pronvice>
    <Registered_Voters>317684</Registered_Voters>
    <Sam_Kea>1000</Sam_Kea>
    <Jeje>1200</Jeje>
    <John_Doe>190</John_Doe>
</Pronvice_Data>

Expected Result:

Candidate | Won In
Jeje         2
John_Doe     1
Sam_Kea      0   

解决方案

OK, I didn't like the data format, so I changed it to this:

<root>
  <Candidates>
    <Sam_Kea/>
    <Jeje/>
    <John_Doe/>
  </Candidates>

  <Provinces>
    <Province name='ProvinceA' Registered_Voters='115852'>
      <Candidate name='Sam_Kea' votes='100'/>
      <Candidate name='Jeje' votes='500'/>
      <Candidate name='John_Doe' votes='400'/>
    </Province>

    <Province name='ProvinceB' Registered_Voters='25852'>
      <Candidate name='Sam_Kea' votes='200'/>
      <Candidate name='Jeje' votes='100'/>
      <Candidate name='John_Doe' votes='300'/>
    </Province>

    <Province name='ProvinceC' Registered_Voters='317684'>
      <Candidate name='Sam_Kea' votes='1000'/>
      <Candidate name='Jeje' votes='1200'/>
      <Candidate name='John_Doe' votes='190'/>
    </Province>
  </Provinces>

</root>

And this is the LINQ-to-XML code I used:

public void Run()
{
    string fileToLoad = this.GetType().Name + ".xml";

    XElement root = XElement.Load(fileToLoad);

    // =======================================================
    System.Console.WriteLine("\nCandidates:");
    var allCandidates = from c in root.Element("Candidates").Elements()
        select c.Name;

    foreach (var d in allCandidates)
        Console.WriteLine("  {0}", d.ToString());


    // =======================================================
    System.Console.WriteLine("\nNumber of Candidates in each Province:");

    var s1 = from p in root.Element("Provinces").Elements()
        select new
            {
                Prov = (string) p.Attribute("name"),
                NumCandidates = p.Elements("Candidate").Count()
            };

    foreach (var d in s1)
        Console.WriteLine("  {0}", d.ToString());


    // =======================================================
    System.Console.WriteLine("\nCandidate with most votes:");
    var s2 = from p in root.Element("Provinces").Elements()
        let maxVotes = (from c in p.Elements("Candidate") select c)
                       .Max(x => ((int)x.Attribute("votes")))

        select new
            {
                Prov = (string) p.Attribute("name"),
                Voters = (int) p.Attribute("Registered_Voters"),
                Candidate = (from c in p.Elements("Candidate")
                             select c).Where(x => ((int)x.Attribute("votes")) == maxVotes)
                    .First().Attribute("name").Value
            };

    foreach (var d in s2)
        Console.WriteLine("  {0}", d.ToString());


    // =======================================================
    System.Console.WriteLine("\nCandidates and the # of provinces won:");

    var s4 = from can in allCandidates
        let count = (from p in s2 where p.Candidate == can select p).Count()
        orderby count descending
        select new { Candidate = can, NumberOfProvincesWon = count };

    foreach (var d in s4)
        Console.WriteLine("  {0}", d.ToString());
}

Output:

Candidates:
  Sam_Kea
  Jeje
  John_Doe

Number of Candidates in each Province:
  { Prov = ProvinceA, NumCandidates = 3 }
  { Prov = ProvinceB, NumCandidates = 3 }
  { Prov = ProvinceC, NumCandidates = 3 }

Candidate with most votes:
  { Prov = ProvinceA, Voters = 115852, Candidate = Jeje }
  { Prov = ProvinceB, Voters = 25852, Candidate = John_Doe }
  { Prov = ProvinceC, Voters = 317684, Candidate = Jeje }

Candidates and the # of provinces won:
  { Candidate = Jeje, NumberOfProvincesWon = 2 }
  { Candidate = John_Doe, NumberOfProvincesWon = 1 }
  { Candidate = Sam_Kea, NumberOfProvincesWon = 0 }

这篇关于获取元素的伯爵那里的候选人赢得了的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆