【问题标题】:LinQ & DataTable Group By Question in C#C# 中的 LinQ 和 DataTable 按问题分组
【发布时间】:2010-12-17 23:03:00
【问题描述】:

我有一个 DataTable 并存储 4 列(StockCardCode、Explain、Quantity、BranchCode),我用 LinQ 将它们分组。代码是我使用 Group By 的关键。当我编写查询时,我只能在 select 语句中使用 2 列,如何显示此查询中的所有列?此查询返回我 2 列。例如,我不能在查询中使用 x.Field("Explain")。

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")) };

传入:数据表

【问题讨论】:

    标签: c# linq datatable group-by


    【解决方案1】:

    由于您按 StockCardQuote 进行分组,因此“Explain”值将是具有相同 StockCardQuote 行的所有 Explain 值——它将是 IEnumerable&lt;T&gt;,所以如果 Explain 是 string ,你会得到IEnumerable&lt;string&gt;

    要将其包含在您的 select 语句中,只需这样做

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

    【讨论】:

    • 是的,我得到了 IEnumerable,那么我怎样才能得到我需要的字符串呢?
    • 你在找什么字符串?对于任何给定的StockCardCode,可能有多个Explain 值。也许你想做的不是分组……
    • 然后您可以按照 Saeed 的建议进行操作:取第一个 IEnumerable&lt;string&gt; 并从中获取 ExplainExplain = grp.First().Select(r =&gt; r.Field&lt;string&gt;("Explain"))
    【解决方案2】:

    您的组中没有唯一的项目,但您可以选择第一个项目并显示字段:

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

    【讨论】:

      猜你喜欢
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多