如果你正在尋找一個XML輸出,你可以使用Linq-to-XML來獲得你的結果。第一步是從DataSet中生成XML。我想這將是這個樣子:
<Customers>
<Customer>
<Name>John</Name>
<Age>30</Age>
<Sex>Male</Sex>
<Order>
<Id>123</Id>
<Price>200.00</Price>
</Order>
</Customer>
<Customer>
<Name>Jane</Name>
<Age>28</Age>
<Sex>Female</Sex>
<Order>
<Id>124</Id>
<Price>100.00</Price>
</Order>
</Customer>
<Customer>
<Name>Jill</Name>
<Age>37</Age>
<Sex>Female</Sex>
<Order>
<Id>125</Id>
<Price>350.00</Price>
</Order>
</Customer>
<Customer>
<Name>Jack</Name>
<Age>34</Age>
<Sex>Male</Sex>
<Order>
<Id>126</Id>
<Price>475.00</Price>
</Order>
</Customer>
</Customers>
加載XML到一個XDocument,然後你可以使用LINQ來執行你的分組,並使用該結果。
XDocument document = XDocument.Parse(xml);
var query = from customer in document.Root.Elements("Customer")
group customer by customer.Element("Sex").Value into sexgroup
select new XElement(sexgroup.Key,
from cust in sexgroup
select new XElement("Customer",
cust.Element("Name"),
cust.Element("Age"),
cust.Element("Order")));
XDocument changedOutput = new XDocument();
changedOutput.Add(new XElement("GroupedCustomers", query));
新的XDocument現在持有的結構如下:
<GroupedCustomers>
<Male>
<Customer>
<Name>John</Name>
<Age>30</Age>
<Order>
<Id>123</Id>
<Price>200.00</Price>
</Order>
</Customer>
<Customer>
<Name>Jack</Name>
<Age>34</Age>
<Order>
<Id>126</Id>
<Price>475.00</Price>
</Order>
</Customer>
</Male>
<Female>
<Customer>
<Name>Jane</Name>
<Age>28</Age>
<Order>
<Id>124</Id>
<Price>100.00</Price>
</Order>
</Customer>
<Customer>
<Name>Jill</Name>
<Age>37</Age>
<Order>
<Id>125</Id>
<Price>350.00</Price>
</Order>
</Customer>
</Female>
</GroupedCustomers>
編輯基於不知道什麼是在客戶元素列表(除姓名,性別等)的評論,你可以改變這個方法在查詢中稍有用處。這將基於給定的XML樣本產生與上面相同的輸出。
var query = from customer in document.Root.Elements("Customer")
group customer by customer.Element("Sex").Value into sexgroup
select new XElement(sexgroup.Key,
from cust in sexgroup
select new XElement("Customer",
cust.Elements().Where(ele => ele.Name.LocalName != "Sex")));
或者你可以簡單地選擇整個cust
元素,它仍然會包括Sex
標籤,當你處理記錄這可能更有意義給你。您仍然可以將它們分組,但您不會在客戶級別丟失任何信息。
var query = from customer in document.Root.Elements("Customer")
group customer by customer.Element("Sex").Value into sexgroup
select new XElement(sexgroup.Key,
from cust in sexgroup
select cust);
一個問題:在我的具體情況下,我不知道哪些字段我會爲客戶,除了我們說的名稱和性別。所以,在linq部分手動創建一個新的XElement對我來說會有點棘手。 – 2010-09-22 13:18:41
@Hilton,我更新了答案以展示如何獲得所有客戶要素(我們沒有「性別」)。 – 2010-09-22 13:25:38
這正是我所需要的。謝謝。 ;) – 2010-09-22 14:12:57