【问题标题】:Linq to Select First GroupLinq 选择第一组
【发布时间】:2014-07-22 11:49:45
【问题描述】:

我想选择列表中的第一个组。有没有更好的方法来做到这一点。

这是我的做法:

var match = (from m in recordList select m).FirstOrDefault();

var matches = recordList.Where(d => d.DateDetails == match.DateDetails);
var lookup = matches.ToLookup(a => a.DateDetails).First();

lookaheadList = lookup.ToList();

我正在选择第一个组并将其推送到名为lookaheadlist 的第二个列表中。

我的数据如下:

DateDetails      Track Details 
0025              ABCD 
0025             EFGH 
0030               XXXXX 
0030               XXXXX

【问题讨论】:

  • 你说组是什么意思?

标签: c# .net linq


【解决方案1】:

不需要ToLookup。查找按不同的DateDetails 分组,但matches 已过滤到单个日期,因此只有一个组可供选择。

您可以跳过过滤器,直接使用:

var match = recordList.ToLookup(a => a.DateDetails).First()

lookaheadList = match.ToList();

但是,由于以下几个原因,这是多余的:

  • 如果您不存储 ToLookup 的结果并使用它按日期查找其他组,则创建查找对象毫无意义——您可以只使用 GroupBy

  • 如果您需要第一组,则根本不需要任何分组(ToLookupGroupBy)。

要直接抓取匹配第一个日期的项目,请使用:

var firstDate = recordList.First().DateDetails;

var matches = recordList.Where(d => d.DateDetails == firstDate)

lookaheadList = matches.ToList();

【讨论】:

    【解决方案2】:

    假设

    group1 = "025"

    group2="030"

    我认为您缺少“分组依据”

    C# LINQ Query - Group By

    【讨论】:

      【解决方案3】:

      我建议你使用GroupBy

      var match = (from m in recordList select m).FirstOrDefault();
      
      var firstGroup= recordList.Where(d => d.DateDetails == match.DateDetails).GroupBy(x=> x.DateDetails).Select(x => x.First());
      

      然后使用firstGroup 变量过滤该元素

      this@Jon Skeet 阅读有关 ILookup 和 IGrouping 性能比较的答案

      请记住,ToLookup 是“立即执行”操作(立即 执行)而 GroupBy 被推迟

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-05
        • 1970-01-01
        • 1970-01-01
        • 2012-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-28
        相关资源
        最近更新 更多