2009-07-10 14 views
2

私は現在、データの取得にLINQ to SQLを使用していて、カスタムオブジェクトにLINQクエリを設定しています。私のカスタムオブジェクトは、datacontractのIsReference = true属性を使用する基本クラスから継承します。私は私のオブジェクト階層をとり、それをXMLにシリアライズしてからサービスに送ります。LINQ、カスタムオブジェクト、シリアル化とオブジェクト参照

しかし、これはXMLで起こっていることは、オブジェクトデータがファイル全体のオブジェクトに対して繰り返されるということです。私がXMLファイルで望んでいるのは、オブジェクトが同じタイプの別のオブジェクトと同じデータを持っている場合(オブジェクトツリー内のどこに置かれているかに関係なく)、最初のオブジェクトへの参照を持たせたいと思います。データを繰り返さない。

LINQ DataContextレベルで処理できるかどうか、またはオブジェクトごとにハッシュテーブルのようなものを使用してそのレベルでそれを追跡する必要がある場合、独自のカスタムオブジェクトをインスタンス化しているかどうかはわかりませんタイプ。私のプログラムでは、私は別のクラスのメソッドなどの項目の同じ種類の別のリストを作成していると私は結果の一部があることを期待に

その後
class Section1 { 
    public static MyClass GetClasses(int Id) 
    { 
    using (DataContext dataContext = new DataContext()) 
    { 
     var result = from items in dataContext.Table 
     where item.Id == Id 
     select items; 

     foreach (var entry in result) 
     { 
     MyClass myClass = new MyClass(); 
     myclass.Id = entry.Id; 
     } 
    } 
    return myclass; 
    } 
} 

:ここ

は私のクラスがどのように見えるかです

Class2 { 
    public static MyClass GetItemClasses(int ItemId) 
    { 
    MyClass myClass = new MyClass(); 

    using (DataContext dataContext = new DataContext()) 
    { 
     var result = from items in dataContext.Table 
      where item.Id == ItemId 
      select items; 

     foreach (var entry in result) 
     { 
     MyClass myClass = new MyClass(); 
     myclass.Id = entry.Id; 
     } 
    } 
    return myclass; 
    } 
} 

これを実行すると、私が次にシリアル化したすべてのオブジェクトが正常に生成されます。繰り返されるそれらのオブジェクトのXMLファイル内の参照をどのように持つことができるかに関するアイデアはありますか?

ありがとうございます。

答えて

1

私は実行可能な解決策を見つけたので、これを更新したいと思います。

私のカスタムオブジェクトは私のDataContextとは別であり、それによって追跡されないので、私は先に行ってオブジェクトのルックアップテーブルを作成し、新しいオブジェクトをインスタンス化する前にそのテーブルをチェックします。

これは、私が後にしたXMLファイルの参照を私に提供しました。

関連する問題