質問

たぶん私はちょうどSQLによって台無しだけど、「XML表」に新しいレコードを挿入し、(少なくとも半自動または)自動的にインデックス付きIDの更新を持っている?いくつかのクールなLINQの方法があります。

ここで、「XML表」で私が何を意味するかです

<myElements>
    <myElement>
        <id>1</id>
        <value>blah</value>
    </myElement>
    <myElement>
        <id>3</id>
        <value>blah</value>
    </myElement>
    <myElement>
        <id>4</id>
        <value>blah</value>
    </myElement>
    <myElement>
        <id>8</id>
        <value>blah</value>
    </myElement>
    <myElement>
        <id>9</id>
        <value>blah</value>
    </myElement>
</myElements>

この場合、テーブルは、「myElements」であり、レコードが「MYELEMENT」要素(myElementsのすなわち、子供)である。

「ID」要素は、スキーマ内のキーとして定義されているので、それはSQLの場合と同様に、多かれ少なかれ「プライマリ・キー」として作用する。

だから、私の質問は、私は、「値」要素が「何でも」と「ID」の要素が自動的に次の使用可能なIDに設定されている(この例では、それは次のようになり、新しい「MYELEMENT」を挿入しないか、ありますMAX(ID)= 10 + 1)。

私は私のXMLデータベースは、XDocumentに保存されていたので、私は、LINQおよび/またはXElementの方法を使用するソリューションをたいと思います。

ありがとうございます。

役に立ちましたか?

解決

すべての私のテーブルは、「ID」と呼ばれる要素を持っているので、

まあ、私はかなり一般的GetNextAvailableId要素を記述することができました。だから、ここに私のインサート・ルーチンは「MYELEMENT」テーブルのために働くだろう方法です。

public virtual int InsertMyElement(string value)
{
    int id = GetNextAvailableId("myElement");
    TableDictionary["myElement"].Add(
        new XElement(_ns + "myElement",
            new XElement(_ns + "id", id),
            new XElement(_ns + "value", value)));
    return id;
}

public virtual int GetNextAvailableId(string tableName)
{
    IEnumerable<int> ids =
        from
            r in TableDictionary[tableName].Elements()
        select
            int.Parse(r.Element(_ns + "id").Value);
    return ids.Max() + 1;
}
私が今までに「ID」以外にも、私のID何かを呼び出すことにした場合、それが壊れる - -

私は、このソリューションについて、あまりにも偉大な感じることはありませんが、それは今のために働くように思える。

コメントは歓迎します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top