【问题标题】:LINQ groupby search in containsLINQ groupby 搜索包含
【发布时间】:2018-10-10 18:56:08
【问题描述】:

我有以下结果:

var result = (from p1 in db.Table
              select new ReportInform 
              {
                  DataValue =  p1.DataValue, 
                  SampleDate = p1.SampleDate 
              })
              .Distinct()
              .ToList();

// Next getting list of duplicate SampleDates
var duplicates = result.GroupBy(x => x.SampleDate)
                       .Where(g => g.Count() > 1)
                       .Select (x => x)
                       .ToList();


foreach (var r in result)
{
    if (duplicates.Contains(r.SampleDate)) // get error here on incompatbility 
    {
        r.SampleDate = r.SampleDate.Value.AddMilliseconds(index++);
    }
}

【问题讨论】:

  • 您要达到的目标是什么?顺便说一句.Select (x => x) 是多余的
  • 停止使用var 屏蔽您不知道的类型,您将看到您的问题...
  • @GiladGreen 对于重复的条目,我喜欢在其中添加毫秒,这样最后结果集中就没有重复了。
  • 我想你的意思是 .Select (x => x.Key) 而不是 .Select (x => x)
  • 如果你做.Distinct(),你不应该有重复(如果你覆盖EqualsGetHashCode

标签: c# linq


【解决方案1】:

无法从“System.DateTime”转换?到'System.Linq.IGrouping

这个错误很明显,但乍一看可能不是。作为程序员,您需要学习如何阅读、理解和理解编译器或运行时错误。

无论如何它都在抱怨它无法将DateTime? 转换为System.Linq.IGrouping<System.DateTime, ReportInForm>。为什么?因为这个查询返回一个System.Linq.IGrouping<System.DateTime, ReportInForm>

var duplicates = result.GroupBy(x => x.SampleDate)
                   .Where(g => g.Count() > 1)
                   .Select (x => x)
                   .ToList();

GroupBy 方法返回IGrouping<System.DateTime, ReportInForm>,它有一个KeyKey 是您分组的对象和该组中的项目列表。您正在按SampleDate 分组并检查该组中是否有多个项目,然后选择该组。因此dulplicates 有一个IGrouping<System.DateTime, ReportInForm> 列表,您要求运行时检查它是否包含DateTime? 并且它在这一行爆炸:

duplicates.Contains(r.SampleDate)

解决此问题的一种方法是:您要做的是选择该组的键。因此这样做:

.Select (x => x.Key)

【讨论】:

  • @Igor,你的回答还不错,但这个答案更清楚地说明了 OP 遇到麻烦的原因以及为什么这是要走的路。 +1
【解决方案2】:

如果您希望 duplicatesList<DateTime?> 类型,那么您打算写这个

.Select(x => x.Key)

而不是

.Select(x => x)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-16
    • 2023-04-02
    • 1970-01-01
    • 2023-02-15
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多