我有 2 个 ef 模型,比方说 Task()
和 Progress()
public class Task()
{
public int Id { get; set; }
public string Title { get; set; }
}
然后
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.Progress...
部分?我能想到的唯一代码是这样的:
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();
我接受任何类型的建议。谢谢:)
最佳答案
您可以使用 moreLINQ 中的 MaxBy 和 MinBy 方法图书馆。
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();
希望对您有所帮助!
关于C# Entity Framework ,简化选择使用相同条件的子属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47697936/