4

SINGLE行を返す場合は正常に機能するクエリがあります。ただし、複数の行がある場合は次のようになります。

  1. 正しい数の行を作成する
  2. 各行を最終行の値に誤って割り当てます...この場合、クエリを満たす最終ノードであるため、 の x3 行が返されます。

x3 DISTINCT 行を返すと予想していました。最終的なxmlノードによって個別の値が上書きされている理由を誰かが提案できますか?

ありがとう

<?xml version="1.0" encoding="utf-8" ?>
<Music>
<customer id="89">
    <name value="Sample Name 2" />
    <age value="31" />
    <location>
        <city value="Wichita" />
        <state value="KS" />
        <country value="USA" />
    </location>
</customer>
<customer id="80">
    <name value="Sample Name 3" />
    <age value="41" />
    <location>
        <city value="Seattle" />
        <state value="WA" />
        <country value="USA" />
    </location>
</customer>
<customer id="84">

    <name value="Sample Name" />
    <age value="29" />
    <location>
        <city value="Los Angeles" />
        <state value="CA" />
        <country value="USA" />
    </location>
</customer>
<customer id="100">
    <name value="Rock UK" />
    <age value="25" />
    <location>
        <city value="Los Angeles" />
        <state value="CA" />
        <country value="USA" />
    </location>
</customer>
</Music>

コードは次のとおりです。

private List<Music> currentMusic { get; set; }
    private IEnumerable<Music> GetCustomer(string id)
    {
        XElement main = XElement.Load(@"D:\work\web\App_Data\Customers.xml");

        IEnumerable<XElement> searched =
            from c in main.Elements("customer")
                where (string)c.Attribute("id") != "100"

            select c;

        Music music = new Music();


        currentMusic = new List<Music>();

        foreach (XElement customer in searched)
        {                
            music.Country = customer.Element("name").Attribute("value").Value;
            music.Name = customer.Element("age").Attribute("value").Value;
            currentMusic.Add(music);
        }
        return currentMusic;
    }        
4

1 に答える 1

2

ループMusic music = new Music();内に移動します。foreach

現時点では、単一のMusicインスタンスを作成し、それをリストに複数回追加しています。リストを更新するたびに、リスト内のすべてのアイテムが影響を受けます。それらはすべて同じアイテムだからです。

于 2012-11-12T14:56:09.480 に答える