C# 什么样的SQL查询或LINQ代码将获得以下数据?
首先,下面是我的数据库模式的相关部分的图片: 我有几个越来越复杂的概念性问题。目前,我使用一系列SQL查询(即从C#代码到SQL Server的多次往返)来实现这些功能,我想找到一种方法在单个查询中实现每个查询,但这样做有点超出了我个人的TSQL/LINQ能力。以下是我试图找出如何编写的问题:C# 什么样的SQL查询或LINQ代码将获得以下数据?,c#,sql,linq,linq-to-sql,C#,Sql,Linq,Linq To Sql,首先,下面是我的数据库模式的相关部分的图片: 我有几个越来越复杂的概念性问题。目前,我使用一系列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
当然,你应该实际列出列名,而不是使用“*”定义“最近”。这仅仅是日期最大的工作计划,还是其他什么?