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

时间:2009-03-27 18:36:17

标签: c# sql linq linq-to-sql

首先,这是我的数据库架构的相关部分的图片:

Database Schema http://ewal.net/stuff/schema.png

我有几个增加复杂性的概念性查询。目前,我正在使用一系列SQL查询(即从C#代码到SQL Server的许多来回跳转),我想找到一种方法在单个查询中获取这些查询,但是这样做有点超出我个人的TSQL / LINQ能力。以下是我试图弄清楚如何写的查询:

  1. 一个查询,用于返回每个用户的最新工作计划记录(不适用于所有用户的特定用户)。
  2. 为每个指定用户集返回最新工作计划的查询(即我在客户端上有一个用户ID列表(即在数组中)
  3. 用于检索每个指定用户组的所有“当前”项目记录的查询。 “当前”表示项目附加到的工作计划记录是关联用户的最新工作计划记录。
  4. 作为参考,我在C#中使用SQL Server 2005和LINQ to SQL,并且很乐意找到基于存储过程的解决方案或完成每个查询的直接LINQ代码。

1 个答案:

答案 0 :(得分:3)

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

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

当然,您实际上应该列出列名而不是使用“*”。