LINQ to XML query - PullRequest
       5

LINQ to XML query

1 голос
/ 23 августа 2010

У меня есть два XML-файла.

Первая компания.xml:

<company active="1">
    <name>name1</name>
    <location>first floor</location>
    <room>25</room>
    <category>power,gas,water</category>
</company>

<company active="1">
    <name>name2</name>
    <location>second floor</location>
    <room>23</room>
    <category>water,gas</category>
</company>

Second bills.xml:

<bill>
    <name>bill1</name>
    <category>power</category>
    <total>5432</total>
</bill>

<bill>
    <name>bill2</name>
    <category>power</category>
    <total>1200</total>
</bill>

<bill>
    <name>bill2</name>
    <category>gas</category>
    <total>3464</total>
</bill>

Теперь у меня есть этот запрос, где я группирую xml по элементу company name и суммирую общее значение из bills

XDocument fDoc = XDocument.Load("company.xml");
XDocument rDoc = XDocument.Load("bills.xml");


var query = from f in fDoc.Elements("company")
where ((string)f.Attribute("active")).Equals("1")
orderby f.Element("name").Value
from r in racuniRoot.Elements("bill")
where (f.Element("category").Value).Split(',').Contains(r.Element("category").Value)
group new
{
BillTotal = Convert.ToInt32(r.Element("total").Value)
}
by f.Element("name").Value into g
select new
{
Name = g.Key,
Total = g.Sum(rec =>rec.BillTotal)
};

foreach (var k in query)
{
    litList.Text += k.Name + k.Total;
}

Таким образом, результат с этим запросом:

name1 6632

name2 3464

И это нормально, но как выбрать другие элементы company (location и room) в этом запросе?

Это то, что я хочу для конечного результата:

name1 6632 первый этаж 25

name2 3464 второй этаж 23

Как я могу это сделать?

Спасибо!

1 Ответ

0 голосов
/ 23 августа 2010

сделать группу по имени, местоположению и комнате

var query = from f in fDoc.Descendants("company")
                    where ((string)f.Attribute("active")).Equals("1")
                    orderby f.Element("name").Value
                    from r in rDoc.Descendants("bill")
                    where (f.Element("category").Value).Split(',').Contains(r.Element("category").Value)
                    group new
                    {
                        BillTotal = Convert.ToInt32(r.Element("total").Value)
                    }
                    by f.Element("name").Value + f.Element("location").Value + f.Element("room").Value into g
                    select new
                    {
                        Name = g.Key,
                        Total = g.Sum(rec => rec.BillTotal),
                    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...