C# Entity Framework ,简化选择使用相同条件的子属性

标签 c# asp.net-mvc entity-framework

我有 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/

相关文章:

c# - C#/。net使用者的Elasticsearch范围查询选项

jquery 使用 asp.net MVC 部分 View 加载

asp.net - 如何在asp.net mvc3中的网络浏览器中显示pdf文件

c# - Exchange Web 服务 - 外部电子邮件客户端的内联图像未呈现

c# - 在哪里可以找到 Microsoft.VisualStudio.QualityTools.WebTestFramework

c# - 获取下一次 session 日期的更优雅的方式

.net - 使用更新的值在 Entity Framework 上下文中重新加载对象

c# - 建立数据库连接的最佳方法是什么(静态、抽象、按请求……)?

c# - 如何从另一个项目访问应用程序设置

c# - MVC - 并行任务中的 System.Threading.ThreadAbortException