LinQ & DataTable Сгруппировать по вопросам в C # - PullRequest
2 голосов
/ 17 декабря 2010

У меня есть DataTable, и я храню 4 столбца (StockCardCode, Explain, Quantity, BranchCode), и я группирую их с помощью LinQ.Код мой ключ для использования Group By.Когда я пишу свой запрос, я просто могу использовать 2 столбца в операторе выбора, как я могу показать все столбцы в этом запросе?Этот запрос возвращает мне 2 столбца.Например, я не могу использовать x.Field («Объяснить») в своем запросе.

var query = from s in incoming.AsEnumerable()
                        group s by s.Field<string>("Stock Card Code")
                            into grp
                            orderby grp.Key
                            select new { StockCardCode = grp.Key, Quantity = grp.Sum(r => r.Field<decimal>("Quantity")) };

входящий: DataTable

Ответы [ 2 ]

5 голосов
/ 17 декабря 2010

Поскольку вы группируете по StockCardQuote, значением «Explain» будут все значения Explain из строк с одинаковым StockCardQuote - это будет IEnumerable<T>, поэтому, если Explain является string , вы получите IEnumerable<string>.

Чтобы включить это в select заявление, просто наберите

select new { 
    StockCardCode = grp.Key, 
    Quantity = grp.Sum(r => r.Field<decimal>("Quantity")),
    Explanations = grp.Select(r => r.Field<string>("Explain")) };
3 голосов
/ 17 декабря 2010

В вашей группе нет уникального элемента, но вы можете выбрать первый элемент и показать поля:

    select 
    new { StockCardCode = grp.Key, 
    Quantity = grp.Sum(r => r.Field<decimal>("Quantity")),
    Explain = grp.First().Select(x=>x.Field<string>("Explain"))}
...