IGrouping не содержит определения для Sum - PullRequest
0 голосов
/ 08 октября 2019

Кто-нибудь может понять, что здесь? Я загружаю файл XML, анализирую его и использую LINQ для получения краткой информации. Вот XML-документ:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <Ticker>
    <Name>MSFT</Name>
    <PurchaseDate>
      2009-01-01
    </PurchaseDate>
    <Shares>44</Shares>
  </Ticker>
  <Ticker>
    <Name>MSFT</Name>
    <PurchaseDate>
      2009-03-01
    </PurchaseDate>
    <Shares>33</Shares>
  </Ticker>
  <Ticker>
    <Name>GOOG</Name>
    <PurchaseDate>
      2009-03-01
    </PurchaseDate>
    <Shares>122</Shares>
  </Ticker>
  <Ticker>
    <Name>AAPL</Name>
    <PurchaseDate>
      2019-03-01
    </PurchaseDate>
    <Shares>89</Shares>
  </Ticker>
</root>

Мой код:

var xmlStr = File.ReadAllText("ClientInfo.xml");
var Summary = XElement.Parse(xmlStr);
var data = from acct in Summary.Elements("Ticker")
       select new
       {
           Ticker = (string)acct.Element("Name"),
           Shares = (int)acct.Element("Shares")
       };

var groupedDataByTicker = from acct in data
                          group acct by acct.Ticker into g
                          select new
                          {
                              Ticker = g.Key,
                              Shares = g.Sum(),
                          };

Работает нормально, но когда я добавляю бит g.Sum(), я получаю это сообщение:

'IGrouping> 'не содержит определения для' Sum ', и для лучшей перегрузки метода расширения' Queryable.Sum (IQueryable) 'требуется приемник типа' IQueryable '

Я не могу понять это, что яЯ делаю не так?

1 Ответ

1 голос
/ 08 октября 2019

В вашем коде вы пытаетесь найти сумму самой группы.

Вместо этого вы должны суммировать по свойству Shares:

var groupedDataByTicker = from acct in data
                          group acct by acct.Ticker into g
                          select new
                          {
                              Ticker = g.Key,
                              Shares = g.Sum(row => row.Shares),
                          };
...