C# 在分组中选择字段
我的C# 在分组中选择字段,c#,.net,linq,C#,.net,Linq,我的数据表中有如下数据: id vrn seenDate --- ---- -------- 1 ABC 2017-01-01 20:00:05 2 ABC 2017-01-01 18:00:09 3 CCC 2016-05-05 00:00:00 我正在尝试修改数据,以仅显示带有最近日期的vrn值。这就是我到目前为止所做的: myDataTable.AsEnumerable().GroupBy(x => x.Fi
数据表中有如下数据:
id vrn seenDate
--- ---- --------
1 ABC 2017-01-01 20:00:05
2 ABC 2017-01-01 18:00:09
3 CCC 2016-05-05 00:00:00
我正在尝试修改数据,以仅显示带有最近日期的vrn
值。这就是我到目前为止所做的:
myDataTable.AsEnumerable().GroupBy(x => x.Field<string>("vrn")).Select(x => new { vrn = x.Key, seenDate = x.Max(y => y.Field<DateTime>("seenDate")) });
myDataTable.AsEnumerable().GroupBy(x=>x.Field(“vrn”))。选择(x=>new{vrn=x.Key,seenDate=x.Max(y=>y.Field(“seenDate”));
我需要修改上述内容,以同时选择id
字段(即,我不想在此字段上分组,但我想将其包含在结果数据集中)
我无法在Select()
部分中输入x.Field(“id”)
,因为Field子句不存在。您可以像这样使用Select new从数据中选择任何需要的内容
var query = from pro in db.Projects
select new { pro.ProjectName, pro.ProjectId };
您需要一个等效的MaxBy
方法
在标准LINQ中,可以通过调用OrderByDescending
+First
来模拟它:
var result = myDataTable.AsEnumerable()
.GroupBy(x => x.Field<string>("vrn"))
.Select(g => g.OrderByDescending(x => x.Field<DateTime>("seenDate")).First())
.Select(x => new
{
vrn = x.Field<string>("vrn"),
id = x.Field<int>("id"),
seenDate = x.Field<DateTime>("seenDate"),
});
var result=myDataTable.AsEnumerable()
.GroupBy(x=>x.Field(“vrn”))
.Select(g=>g.OrderByDescending(x=>x.Field(“seenadate”)).First()
.选择(x=>new
{
vrn=x.字段(“vrn”),
id=x.字段(“id”),
seenDate=x.字段(“seenDate”),
});
如果您在同一vrn
中可能有几个ID
具有相同的最大日期,则以下操作将起作用:
IEnumerable<DataRow> rows = myDataTable.AsEnumerable()
.GroupBy(x => x.Field<string>("vrn"))
.Select(x => new
{
Grouping = x,
MaxSeenDate = x.Max(y => y.Field<DateTime>("seenDate"))
})
.SelectMany(arg =>
arg.Grouping.Where(y => y.Field<DateTime>("seenDate") == arg.MaxSeenDate));
IEnumerable rows=myDataTable.AsEnumerable()
.GroupBy(x=>x.Field(“vrn”))
.选择(x=>new
{
分组=x,
MaxSeenDate=x.Max(y=>y.Field(“seenDate”))
})
.SelectMany(arg=>
arg.Grouping.Where(y=>y.Field(“seenDate”)==arg.MaxSeenDate));
它将重新运行原始数据行的IEnumerable
,这样您就有了所有字段
或者,您可以添加另一个select以仅包含所需的字段。以及要包含的Id
字段是什么?例如,vrn
ABC有两个id值。@IvanStoev最近看到的一个id值有很多关于sql的问题和解决方案。您是否只需要Linq中的解决方案,还是可以使用sql中的解决方案?@Shadow不幸的是,在我的情况下,它必须在Linq中完成,因为数据已经在数据表中。例如,请参阅:抱歉,我正在使用cell phon进行回答,因此我无法使用代码插件指定查询中的代码位置?Var query=from MyDataTable中的项选择new{vrn=item.vrn}不过,您粘贴的是一个单独的查询。我需要修改上面粘贴的查询,虽然这正是我要找的。干得好,谢谢。