c# - LINQ 左联接仅与具有列最大值的行

标签 c# sql oracle linq

我有一个表 ProjectInformation 作为(左表)

ProjectID int
{fields}

另一个表,ProjectUpdates(右表)。该表每月新增1个ProjectID的多条记录。

ProjectID int
CreateDate date
{other fields that have records}

它们的关系是 1-M。 示例数据

ProjectInformation
{ ProjectID = 1, DataA = "ABC"}
{ ProjectID = 2, DataA = "DEF"}
{ ProjectID = 3, DataA = "GHI"}

ProjectUpdates
{ProjectID = 1, CreateDate = "24/2/2014", DataB = "JKL"}
{ProjectID = 1, CreateDate = "25/1/2014", DataB = "MNL"}
{ProjectID = 1, CreateDate = "23/12/2014", DataB = "PQR"}
{ProjectID = 1, CreateDate = "23/11/2014", DataB = "STU"}
{ProjectID = 2, CreateDate = "24/2/2014", DataB = "VWX"}
{ProjectID = 2, CreateDate = "24/1/2014", DataB = "YZA"}
{ProjectID = 3, CreateDate = "21/12/2014", DataB = "BCD"}
{ProjectID = 3, CreateDate = "24/11/2014", DataB = "EFG"}
{ProjectID = 3, CreateDate = "24/10/2014", DataB = "HIJ"}
{ProjectID = 3, CreateDate = "24/8/2014", DataB = "KLM"}
{ProjectID = 3, CreateDate = "24/6/2014", DataB = "NOP"}

我希望我的 LINQ 查询返回以下数据(每个项目 1 行)

条件:左表中的行将与右表中具有最大项目 CreateDate 值的行连接。

{ProjectID = 1, CreateDate = "24/2/2014", DataA ="ABC", DataB = "JKL"}
{ProjectID = 2, CreateDate = "24/2/2014", DataA ="DEF", DataB = "VWX"}
{ProjectID = 3, CreateDate = "21/12/2014", DataA ="GHI", DataB = "BCD"}

最佳答案

您可以通过多种方式做到这一点。其中一种方式是:

var result = (from pi in projectInformations
              join pu in projectUpdates on pi.ProjectID equals pu.ProjectID into tpu
              from t in tpu.OrderByDescending(c => c.CreateDate).Take(1)
              select new { pi.ProjectID, pi.DataA, t.CreateDate, t.DataB }).ToList();

关于c# - LINQ 左联接仅与具有列最大值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29343754/

相关文章:

mysql - 如果不使用另一个表作为 'SELECT' 语句,则检查表是否存在

c# - 设置对象的 DataSource 属性时,何时使用 Type 与实例?

c# - 使用webservice每天只动态执行一次方法

MySql - 将三个表中的数据合并到一个表中

mysql - 如何在 MySQL 中添加此条件的约束?

sql - 为什么 Tableau 数据源和工作表显示不同的数据?

c# - 在 Visual Studio 2010 C# 项目中设置调试/运行环境变量?

c# - Json.NET - 反序列化接口(interface)属性引发错误 "type is an interface or abstract class and cannot be instantiated"

sql - ODBC 中的 ROUND 函数

java - 由 : java. sql.SQLException : ORA-01795: maximum number of expressions in a list is 1000? 引起