我得到以下结果:
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++);
}
}
答案 0 :(得分: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>
的{{1}},而Key
是您分组的对象以及该组中的项目列表。您正在按Key
进行分组,并检查该组中是否有多个项目,然后选择该组。因此SampleDate
有一个dulplicates
的列表,您要让运行时检查它是否包含IGrouping<System.DateTime, ReportInForm>
并在此行爆炸:
DateTime?
解决此问题的一种方法是:您要做的是选择该组的密钥。因此,这样做:
duplicates.Contains(r.SampleDate)
答案 1 :(得分:0)
如果您期望duplicates
的类型为List<DateTime?>
,那么您打算写这个
.Select(x => x.Key)
代替
.Select(x => x)