2009-11-24 98 views
1

在我的表,我有我的客戶ID作爲問題在LINQ查詢

實際輸入: -

<client> 
    <ClientId>421</ClientId> 
    <Amount>100</Amount> 
<client> 
<client> 
    <ClientId>426</ClientId> 
    <Amount>200</Amount> 
<client> 
<client> 
    <ClientId>421</ClientId> 
    <Amount>300</Amount> 
<client> 
<client> 
    <ClientId>427</ClientId> 
    <Amount>400</Amount> 
<client> 
<client> 
    <ClientId>429</ClientId> 
    <Amount>500</Amount> 
<client> 
<client> 
    <ClientId>436</ClientId> 
    <Amount>600</Amount> 
<client> 
<client> 
    <ClientId>421</ClientId> 
    <Amount>900</Amount> 
<client> 

我需要查詢此使用LINQ。

我需要總結的金額場只有唯一客戶機ID並顯示爲單記錄(例如:對421有三個的ClientID記錄,但我只需要一個421與所有的客戶端數量的總和和金額。應顯示爲(1300)

我需要其他的客戶端ID值與此

顯示最後我的輸出應該是這樣的

421  1300 
426  200 
427  400 
429  500 
436  600 

我如何能實現使用XML在這LINQ查詢LINQ

回答

4

這對我有用。你的XML例子是錯的太多,缺少的結束</client>

var result = 
    from c in document.Elements("client") 
    group c by c.Element("ClientId").Value into grouped 
    select new 
    { 
     ClientId = grouped.Key, 
     TotalSum = grouped.Sum(g => Decimal.Parse(g.Element("Amount").Value)) 
    }; 

foreach (var group in result) 
    Console.WriteLine(group.ClientId + ": " + group.TotalSum); 

編輯:我裝喜歡遵循的例子中的XDocument:

var document = XElement.Parse(
@"  
<clients>  
<client> 
    <ClientId>421</ClientId> 
    <Amount>100</Amount> 
</client> 
<client> 
    <ClientId>426</ClientId> 
    <Amount>200</Amount> 
</client> 
<client> 
    <ClientId>421</ClientId> 
    <Amount>300</Amount> 
</client> 
<client> 
    <ClientId>427</ClientId> 
    <Amount>400</Amount> 
</client> 
<client> 
    <ClientId>429</ClientId> 
    <Amount>500</Amount> 
</client> 
<client> 
    <ClientId>436</ClientId> 
    <Amount>600</Amount> 
</client> 
<client> 
    <ClientId>421</ClientId> 
    <Amount>900</Amount> 
</client> 
</clients>", LoadOptions.PreserveWhitespace); 
+0

+1打我:)什麼。確認。這個答案應該給出所需的輸出。 – Kamal 2009-11-24 08:23:56

+1

爲什麼LoadOptions.PreserveWhitespace? – 2009-11-24 08:28:23

+0

@Alex謝謝工作良好。 – 2009-11-24 11:29:00

0

首先,確保你的XML是正確的。你的結束標記缺少/,你還需要一個根元素。

XElement Results = XElement.Load(xmlfilepath); 
XNamespace NameSpace = Results.Name.Namespace; 
var xe = (from c in Results.Elements(NameSpace + "client") 
      group c by c.Element(NameSpace + "ClientId").Value into g 
      select new { clientid = g.Key, AmountTotal = g.Sum(h=>decimal.Parse(h.Element(NameSpace+"Amount").Value)) }).ToList(); 

可以再通過結果的foreach,做你需要做的