C# 什么样的SQL查询或LINQ代码将获得以下数据?

C# 什么样的SQL查询或LINQ代码将获得以下数据?,c#,sql,linq,linq-to-sql,C#,Sql,Linq,Linq To Sql,首先,下面是我的数据库模式的相关部分的图片: 我有几个越来越复杂的概念性问题。目前,我使用一系列SQL查询(即从C#代码到SQL Server的多次往返)来实现这些功能,我想找到一种方法在单个查询中实现每个查询,但这样做有点超出了我个人的TSQL/LINQ能力。以下是我试图找出如何编写的问题: 一个查询,用于返回每个用户(不是特定用户——是所有用户)的最新工作计划记录 一个查询,用于返回每个指定用户集的最新工作计划(即,我在客户机上有一个用户ID列表(即,在一个数组中) 用于检索每个指定用户集

首先,下面是我的数据库模式的相关部分的图片:

我有几个越来越复杂的概念性问题。目前,我使用一系列SQL查询(即从C#代码到SQL Server的多次往返)来实现这些功能,我想找到一种方法在单个查询中实现每个查询,但这样做有点超出了我个人的TSQL/LINQ能力。以下是我试图找出如何编写的问题:

  • 一个查询,用于返回每个用户(不是特定用户——是所有用户)的最新工作计划记录
  • 一个查询,用于返回每个指定用户集的最新工作计划(即,我在客户机上有一个用户ID列表(即,在一个数组中)
  • 用于检索每个指定用户集的所有“当前”项目记录的查询。“当前”表示项目附加到的工作计划记录是关联用户的最新工作计划记录

  • 作为参考,我正在使用SQL Server 2005和C#中的LINQ to SQL,我很乐意找到一个基于存储过程的解决方案或直接LINQ代码来完成每个查询。

    所有用户的最新工作计划:

    SELECT
         WP1.*
    FROM
         Workplans WP1
    LEFT OUTER JOIN dbo.Workplans WP2 ON
         WP2.UserID = WP1.UserID AND
         WP2.Date > WP1.Date
    WHERE
         WP2.WorkplanID IS NULL
    
    对于给定的一组用户,编写一个表值函数,将分隔的ID列表转换为这些ID的表。如果您四处搜索,我知道我以前在此处发布过该代码。然后您可以使用:

    SELECT
         WP1.*
    FROM
         dbo.GetTableFromIDList(@id_list) U
    INNER JOIN Workplans WP1 ON
         WP1.UserID = U.ID
    LEFT OUTER JOIN dbo.Workplans WP2 ON
         WP2.UserID = WP1.UserID AND
         WP2.Date > WP1.Date
    WHERE
         WP2.WorkplanID IS NULL
    
    对于给定的用户集,返回其当前所有项目:

    SELECT
         P.*
    FROM
         dbo.GetTableFromIDList(@id_list) U
    INNER JOIN Workplans WP1 ON
         WP1.UserID = U.ID
    LEFT OUTER JOIN dbo.Workplans WP2 ON
         WP2.UserID = WP1.UserID AND
         WP2.Date > WP1.Date
    INNER JOIN dbo.Projects P ON
         P.WorkplanID = WP1.WorkplanID
    WHERE
         WP2.WorkplanID IS NULL
    
    当然,你应该实际列出列名,而不是使用“*”

    定义“最近”。这仅仅是日期最大的工作计划,还是其他什么?