【发布时间】:2020-09-07 13:08:31
【问题描述】:
我的代码需要帮助。
我设计了一个 LINQ 查询来从我的数据表中删除重复项。
问题是我需要添加一个额外的过滤器,我可以在其中过滤重复项并仅获取日期最早的记录。
就像您在下面看到的那样,我已将 orderby 添加到我的查询中,但它抛出了一个错误:
实例参数:不能从 'System.Linq.IGrouping
' 到 'System.Data.DataRow'
还有这个:
System.Linq.IGrouping
' 没有 包含“字段”的定义和最佳扩展方法 重载'System.Data.DataRowExtensions.Field(System.Data.DataRow, string)' 有一些无效参数
具有日期但为字符串格式的字段是:x.Field("Effective date")
.OrderBy(x => x.Field<string>("Effective date"))
我已经写了一些代码:
ErrorMessage = "";
CollectionOut = new DataTable();
DataTable dt1 = new DataTable();
try
{
dt1 = CollectionIn;
DataTable dtMerged = dt1.AsEnumerable()
.GroupBy(r => new {d= r.Field<string>("Employee ID"), f=r.Field<string>("Report update date") })
.OrderBy(x => x.Field<string>("Effective date"))
.Select(g => g.First()).CopyToDataTable();
CollectionOut = dtMerged;
}
catch (Exception ex)
{
ErrorMessage = ex.Message.ToString();
}
我不知道如何解决这个问题。
感谢您的帮助!
【问题讨论】:
-
OrderBy 返回一个 IGroupings 的 IEnumerable,因此您不能在该步骤之后按数据行的属性进行排序。我认为如果您只是将 GroupBy 与 OrderBy 语句交换,它已经可以工作了。不了解您的数据库结构,但您可能还应该注意空组,因此您应该使用 Select(g => g.FirstOrDefault()).Where(r => r != null)。