c# - 如何使用带有 C# lambda 表达式的另一个表列中的 orderby

标签 c# asp.net-mvc entity-framework lambda sql-order-by

我有两个表,我需要使用 lambda 表达式从第二个表中排序数据。

例如:表 A 与表 B 以一对多关系链接。表 A 的主键将是表 B 中的外键。我需要从表中获取数据并按表 B 日期时间列排序。有人可以给我一个主意吗?谢谢。

A.cs文件有这段代码,

public partial class A
{
    public A()
    {
      this.B = new HashSet<B>();
    }
    public virtual ICollection<B> B { get; set; }
}

B.cs文件有这段代码,

public partial class B
{
    public Nullable<long> a_pk { get; set; }
    public Nullable<System.DateTime> system_date_time { get; set; }    
    public virtual A A { get; set; }
}

在模型中,cs文件有这样的代码。谢谢

最佳答案

它可能不是很有效,但你可以这样做:

// Sample data
var collection = new List<A>
{
    new A()
    {
        B = new List<B>
        {
            new B { system_date_time = DateTime.Now.AddHours(-1) },
            new B { system_date_time = DateTime.Now.AddHours(-2) },
            new B { system_date_time = DateTime.Now.AddHours(-3) },
        }
    },
    new A()
    {
        B = new List<B>
        {
            new B { system_date_time = DateTime.Now.AddDays(-1) },
            new B { system_date_time = DateTime.Now.AddDays(-2) },
            new B { system_date_time = DateTime.Now.AddDays(-3) },
        }
    },
    new A()
    {
        B = new List<B>
        {
            new B { system_date_time = DateTime.Now.AddYears(-1) },
            new B { system_date_time = DateTime.Now.AddYears(-2) },
            new B { system_date_time = DateTime.Now.AddYears(-3) },
        }
    }
};


var sorted = collection.OrderByDescending(x => x.B.Max(y => y.system_date_time));

SQL 将是这样的:

Select 
    *,
    (SELECT 
        MAX([Extent2].[system_date_time]) AS [A1]
        FROM [dbo].[B] AS [Extent2]
        WHERE [Var_38].[a_pk ] = [Extent2].[a_pk ]) AS [C1]
    FROM [dbo].[A] AS [Var_38]
)  AS [Project1]
ORDER BY [C1] ASC

如果你想要 A 并包含 B,那么你可以这样做:

var result = _context.YourATable.Include(x => x.B).OrderByDescending(x => x.B.Max(y => y.system_date_time));

关于c# - 如何使用带有 C# lambda 表达式的另一个表列中的 orderby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38849217/

相关文章:

c# - Azure Web 应用程序上的 Office 组件安装

c# - 如何查询 Entity Framework 实体容器以获取派生实体类的对象?

c# - 我如何验证第 3 方用户访问我的 Web API asp.net?

c# - Entity Framework - 数据库 View 或在 Linq to Entities 中加入

asp.net-mvc - Visual Studio 2019 版本 16.11.0 - 错误 CS1576 : The line number specified for #line directive is missing or invalid

c# - 查询字符串和提取值的问题

c# - 如何选择 LINQ 数据表连接中的所有列?

按下键时的 C# 和 Unity3D

c# - 当 Windows Shell 替换为 Windows Forms 应用程序时,第一次按键丢失

asp.net - 在菜单中标记 "current"导航项的最佳方式