【发布时间】:2011-03-30 14:29:45
【问题描述】:
我需要用 C# 编写从 DB 中返回一些特定字典的方法。假设存储在 2 个表中的数据如下所示:
表组(id、名称):
1, 'Management'
2, 'IT Department'
3, 'Production'
用户(id、name、groupId、projectId):
1, 'John', 1, 1
2, 'Ben', 2, 1
现在我需要检查每个项目中每个组的用户不少于一个。实现此信息的 sql 查询将是:
declare @projectId int;
set @projectId = 1;
select g.Name, case when(isnull(u.id,0) > 0) then 1 else 0 end HasUsers
from groups g
left join users u
on g.id = u.groupId and u.projectId = @projectId;
此查询返回的信息如下所示:
'Management', 1
'IT Department', 1
'Production', 0
查询中有什么特别之处? projectId 的条件包含在“join”部分,而不是“where”部分。因此,“Production”组的行返回值为 0。当我们将 projectId 的条件移动到“where part”时,返回结果中不会出现记录。
最后一个问题 - 是否可以使用一个 lambda 表达式来实现类似的效果? (我知道我可以实现 2 个集合并使用某种循环语句得到最终结果,但这不是这个问题的主题)
问候,
烤肉
【问题讨论】: