我目前正在使用LINQ to SQL进行数据检索,然后使用LINQ查询填充我的自定义对象。我的自定义对象继承自在datacontract中使用IsReference = true属性的基类。然后我接受我的对象层次结构并将其序列化为XML,然后将其发送到服务。
然而,这在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文件中为那些重复的对象提供引用的任何想法?
感谢您的任何意见。
答案 0 :(得分:1)
我以为我找到了一个可行的解决方案,我认为我会更新它。
由于我的自定义对象与我的DataContext是分开的并且没有被它跟踪,因此我继续为我的对象创建了一个查找表,并在实例化一个新对象之前检查该表。
这为我提供了我所追求的XML文件中的引用。