【发布时间】:2014-03-22 00:28:18
【问题描述】:
我支持的系统具有属于顶级实体的组层次结构。从概念上讲,它看起来像这样:
id | Group | parent
-------------------------
10 | Enterprise | N/A
20 | Partner A | 10
21 | Partner B | 10
29 | Business Q | 21
实际的组表如下所示:
int | GroupID
int | BusinessID (nullable)
int | PartnerID (nullable)
所以数据看起来像这样:
GrpID | PtnrID | BzID | Name
------------------------------------
10 | null | null | Enterprise
20 | 10 | null | Partner A
21 | 10 | null | Partner B
29 | 10 | 21 | Business Q
组存储的是可以为空并指向另一个组的 GroupID 的 partnerid 和 businessid,而不是引用父组的组。
组特定的设置可以存储在任何级别。企业定义默认值,但合作伙伴和业务实体可以覆盖。例如:
10 | color | red
20 | color | blue
29 | color | green
这将导致以下设置
Enterprise | red
Partner A | blue
Partner B | red
Business | green
我正在尝试编写一个 linq 查询来获取给定组的设置,但是遇到了问题
from set in GroupSettings
from grp in Groups
where set.setting=="color" && grp.GroupID==29 &&
(
set.GroupID==grp.BusinessID || set.GroupID==grp.PartnerID
)
select set
这将返回企业的定义和业务的覆盖值
10 | red
29 | green
有没有一种我可以使用的语法在我的 where 子句中为我(因为没有更好的术语)提供独占性或功能,如果不满足当前的条件,它只会落入下一个 or 语句?我的目标是只返回相关行 - 在这种情况下是 29 | green。
【问题讨论】:
-
我用更多信息更新了我的帖子。我试图尽可能减少问题......
-
我以表格格式表示数据。它可能看起来有点奇怪,因为它是实际系统的部分表示
标签: c# sql linq linq-to-sql hierarchy