Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在LINQ to Entities中获取最大时间戳和groupby另一个字段_C#_Linq_Linq To Entities_Grouping - Fatal编程技术网

C# 如何在LINQ to Entities中获取最大时间戳和groupby另一个字段

C# 如何在LINQ to Entities中获取最大时间戳和groupby另一个字段,c#,linq,linq-to-entities,grouping,C#,Linq,Linq To Entities,Grouping,我有一个具有以下字段的实体 GUID任务ID, 孩子们, 日期时间戳 TaskId可能与SubTaskKid是一对多。它几乎就像一个复合键 我想编写一个或多个表达式,以生成每个TaskId中的最新表达式 i、 e TaskId子任务的时间戳 1A 2010-11-22 15:48:49.727 1b 2010-11-22 16:24:51.117 2c2010-11-1511:49:05.717 2d 2010-11-1514:02:11.467 将导致仅包含以下内容的序列: TaskId子任务

我有一个具有以下字段的实体 GUID任务ID, 孩子们, 日期时间戳

TaskId可能与SubTaskKid是一对多。它几乎就像一个复合键

我想编写一个或多个表达式,以生成每个TaskId中的最新表达式 i、 e

TaskId子任务的时间戳
1A 2010-11-22 15:48:49.727
1b 2010-11-22 16:24:51.117
2c2010-11-1511:49:05.717
2d 2010-11-1514:02:11.467

将导致仅包含以下内容的序列:
TaskId子任务的时间戳
1b 2010-11-22 16:24:51.117
2d 2010-11-1514:02:11.467

这个表达式可以很好地显示所有TaskId和时间戳

var q1 = 
    from req in myEntity
    orderby req.TaskId
    select new
    {
        req.TaskId,
        req.SubTaskId,
        req.Timestamp
    };
但我只想显示每个TaskId的最新时间戳。我在表达式中添加max的所有尝试都失败了。张贴(http://stackoverflow.com/questions/2034800/how-do-you-find-the-group-wise-max-in-linq)看起来很接近,但我无法将其转化为有效的东西。也许需要一个
foreach

这个怎么样

var q1 = 
    from req in myEntity
    group req by req.TaskId into g
    let topReq = g.OrderByDescending(r => r.Timestamp).FirstOrDefault()
    select new
    {
        topReq.TaskId,
        topReq.SubTaskId,
        topReq.Timestamp
    };

美好的我喜欢你做测试的方式。下次我在LINQ中有问题时,我一定要这样构造序列。这工作得很好。唉,LINQtoEntities不支持Single,尽管您的示例确实工作得很好。
var tasks = new[] { 
new { TaskId = 1, SubTaskId = "A", Timestamp = DateTime.Parse("2010-11-22 15:48:49.727")},
new { TaskId = 1, SubTaskId = "B", Timestamp = DateTime.Parse("2010-11-22 16:24:51.117")},
new { TaskId = 2, SubTaskId = "C", Timestamp = DateTime.Parse("2010-11-15 11:49:05.717")},
new { TaskId = 2, SubTaskId = "D", Timestamp = DateTime.Parse("2010-11-15 14:02:11.467")}};


var newestTasks = 
    from task in tasks
    group task by task.TaskId into g
    select g.Where(t => t.Timestamp == g.Max(t2 => t2.Timestamp)).Single();

foreach (var task in newestTasks)
    Console.WriteLine("TaskId = {0}, SubTaskId = {1}, Timestamp = {2}", 
        task.TaskId, task.SubTaskId, task.Timestamp);