C# C实体框架,简化选择使用相同条件的子属性
我有两个ef模型,比如任务和进度 然后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
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();