【问题标题】:Get values from Grouping result except values from list从分组结果中获取值,但列表中的值除外
【发布时间】:2018-04-11 07:35:30
【问题描述】:

它看起来很简单,但我无法忘记它。

我有一个清单:

List<IGrouping<byte, MyClass>>

MyClass 对象有一个时间戳属性,我也有时间戳列表,现在我想知道是否有一种优雅的方法可以从时间戳属性在我的时间戳列表中的分组列表中获取所有值?

我已经解决了这个问题,但我认为它可以以更有效的方式解决。代码如下:

var loadedValues = new List<MyClass>();
foreach (IGrouping<byte, MyClass> value in Values)
{
    loadedValues.AddRange(value.Select(c => c).Where(c => Timestamps.Any(point => c.Timestamp == point)));
}

【问题讨论】:

  • 您要添加整个组还是只添加具有匹配时间戳的对象?
  • 只有与时间戳匹配的对象,所以在任何组中都有一个时间戳存在于我的时间戳列表中,我想要添加。

标签: c# linq


【解决方案1】:

您可以使用Join,它使用基于集合的方法,因此它是more efficient than Where

IEnumerable<MyClass> query = 
                from grp in Values
                from cls in grp
                join ts in Timestamps on cls.Timestamp equals ts
                select cls;

List<MyClass> loadedValues = query.ToList();

【讨论】:

    猜你喜欢
    • 2019-01-09
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多