【问题标题】:how to group by one column only using linq?如何仅使用 linq 按一列分组?
【发布时间】:2023-03-10 08:19:01
【问题描述】:

我正在使用 Linq 查询对一列(电话字符串)进行分组,并返回该列和名为 Status 的第二列的最后一个值(也是一串数字)。我想将此查询的结果添加到新的数据表中。

我已经尝试过很多方法,但结果总是将两列组合在一起,而不仅仅是一个。如果我从 dataTable 中删除字段状态,则该组运行良好,但我需要它。示例:

手机状态

123 --------- 1

123 --------- 2

我想检索结果:123, 2 但我得到了两行。 知道为什么会发生这样的事情吗?这是代码:

var queryGroupLog =
from log2 in lg2.AsEnumerable()
group log2 by log2.Field<string>("Phone") into groupPhone
select groupPhone.OrderBy(p => p.Field<string>("Status")).LastOrDefault();

【问题讨论】:

    标签: c# linq linq-group


    【解决方案1】:

    你可以试试这样的:

    var queryGroupLog = from log2 in lg2.AsEnumerable()
                        group log2 by log2.Field<string>("Phone") into groupPhone
                        select new 
                        {
                            Phone = groupPhone.Key,
                            Status = groupPhone.OrderBy(p => p.Field<string>("Status"))
                                               .LastOrDefault()
                        };
    

    【讨论】:

    • 这是否等于groupPhone.Max(...)
    • @Grundy 我认为是一样的。但是,我还没有测试过。
    • 谢谢,但恐怕我会得到相同的结果。我以两种方式检查结果: 1. foreach (var row in queryGroupLog) { log_grouped.Rows.Add(row); } Console.WriteLine("{0}", log_grouped.Rows.Count); -------------------------------------------------- -------------------------------- 2. foreach (var nameGroup in queryGroupLog) {Console.WriteLine("{0} ", b); b++; } ------------------------------------------------- ---------------------我通过两列得到一个组的结果数。
    • 发现问题了!并使用了上面的答案。再次感谢! :)
    【解决方案2】:
    new KeyValuePair(groupPhone.Key,groupPhone.OrderBy((p) => p.Field("Status")).LastOrDefault()))
    

    【讨论】:

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