当调用的存储过程返回大量行时,如何在C#中创建多个XML文件?

时间:2017-11-28 18:32:14

标签: c# sql-server xml linq

目前,我正在开发一个控制台应用程序,它执行以下操作:

  1. 执行SQL Server存储过程以获取手机号码等数据。

  2. 使用以下catch创建一个或多个XML文件 - 每个文件最多只能有100个元素。

  3. 想象一下下面的内容:

    我有一个Car类,Car类作为以下属性:

    Make, Year, Model, Color, Number Of Axles
    

    然后我有一个

    List<Car> myCars = new List<Car>(); 
    

    Car类现在由存储过程填充,在控制台应用程序代码中我使用默认构造函数,填充列表等...

    我发现myCars.Count = 200。我想要两个XML文件,如下所示:

    <!--First xml file-->
    <myCars>
         <!-- first set of 100 cars-->
    </myCars>
    

    然后是第二个文件

    <!-- Second xml file-->
    <myCars>
        <!-- second set of 100 cars from the myCars list -->
    </myCars>
    

    我正在使用XDocument和Linq to XML技术。请帮忙!

3 个答案:

答案 0 :(得分:2)

只需使用XmlSerializer来创建汽车的xml。选择批量为100为该集创建新的xml文件。

这样的事情:

 XmlSerializer ser = new XmlSerializer(typeof(List<Car>));
 int carsPerFile = 100;
 int fileIndex = 1;
 for(int i=0; i<myCars.Count; )
 {
    var cars = myCars.Skip(i).Take(carsPerFile);
    using (var text = XmlWriter.Create(string.Contact("myCars_",fileIndex++,".xml"))
    {
        ser.Serialize(text, cars.ToList());
    }
    i += carsPerFile;
 }

答案 1 :(得分:1)

您可以使用

从集合创建分区
11 10

然后将每个分区序列化为文件

int partitionSize = 100;
var partitions = collection
    .Select( (e,i) => new { Partition = i / partitionSize, Element = e } )
    .ToLookup( e => e.Partition, e => e.Element );

答案 2 :(得分:0)

List<Car> firstHundred = myCars.Take(100); // first 100
List<Car> secondHundred = myCars.Skip(100).Take(100) // 100-200

然后将这两个列表序列化为不同的xml文件。