Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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# C实体框架,简化选择使用相同条件的子属性_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# C实体框架,简化选择使用相同条件的子属性

C# C实体框架,简化选择使用相同条件的子属性,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我有两个ef模型,比如任务和进度 然后 public class Progress() { public int Id { get; set; } public int Id_Task { get; set; } public string Status { get; set; } public DateTime Update { get; set; } } 我想获取每个任务的数据以及它的最后进度,所以我制作了一个ViewModel public class V

我有两个ef模型,比如任务和进度

然后

public class Progress()
{
    public int Id { get; set; }
    public int Id_Task { get; set; }
    public string Status { get; set; }
    public DateTime Update { get; set; }
}
我想获取每个任务的数据以及它的最后进度,所以我制作了一个ViewModel

public class ViewTask()
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Last_Status { get; set; }
    public DateTime Last_Update { get; set; }
}
现在,我就是这么做的:

var data = _context.Task
    .Select(x => new ViewTask
    {
        Id = x.Id,
        Title = x.Title,
        Last_Status = x.Progress.OrderByDescending(y => y.Update)
            .Select(y => y.Status).FirstOrDefault(),
        Last_Update = x.Progress.OrderByDescending(y => y.Update)
            .Select(y => y.Update).FirstOrDefault()
    }).ToList();
有没有更好的方法,这样我就不需要重复x。。。部分我能想到的唯一代码是这样的:

var data = _context.Task
    .Select(x => new
    {
        Id = x.Id,
        Title = x.Title,
        Progress = x.Progress.OrderByDescending(y => y.Update).FirstOrDefault()
    })
    .Select(x => new ViewTask
    {
        Id = x.Id,
        Title = x.Title,
        Last_Status = x.Progress.Status
        Last_Update = x.Progress.Update
    }).ToList();

我接受任何建议。谢谢:

您可以使用库中的MaxBy和MinBy方法


希望能有帮助

谢谢,它比我现在用的短。但是如果我还需要用在哪里呢。它仍然很长而且重复
var data = _context.Task
    .Select(x => new
    {
        Id = x.Id,
        Title = x.Title,
        Progress = x.Progress.OrderByDescending(y => y.Update).FirstOrDefault()
    })
    .Select(x => new ViewTask
    {
        Id = x.Id,
        Title = x.Title,
        Last_Status = x.Progress.Status
        Last_Update = x.Progress.Update
    }).ToList();
var data = _context.Task
.Select(x => new ViewTask
{
    Id = x.Id,
    Title = x.Title,
    Last_Status = x.Progress.MaxBy(y => y.Update).Status,
    Last_Update = x.Progress.MaxBy(y => y.Update).Update
 }).ToList();