【问题标题】:Hierarchical Structures Database Select By Lambda Expression通过 Lambda 表达式选择层次结构数据库
【发布时间】:2012-12-08 16:59:45
【问题描述】:

通过 Lambda 表达式选择层次结构数据库 嗨,我的表结构是递归的

身份证

父母ID

用户组名

如何通过 Lambda 表达式从我的上下文中选择子集 ID

我尝试先选择

var keys = db.UsersGroups.Select(x => x).Where(u => u.GroupMasterID == 1).ToArray();

var UsersGroup = db.UsersGroups.Where(x => keys.Contains(x.GroupMasterID));

但我认为它返回错误或仅返回 2 级数据

请帮帮我

【问题讨论】:

标签: c# sql lambda


【解决方案1】:

这是你无法做到的事情,如果不搞砸,使用 linq。您需要做的是使用common table expression 来展平层次结构,然后您就可以编写一个简单的 linq 查询。

【讨论】:

  • 嗨 lontivero ...我如何在 Lambda 中使用 CTE,你能给我举个例子吗
  • 和文章一样使用CTE创建一个sql视图。然后针对该展平视图执行查询。魔法不在于 Linq,而在于扁平化层次结构,仅此而已。
【解决方案2】:

最后我创建了一个 sql 函数

喜欢这个

Create  FUNCTION [dbo].[GET_USERGROUPLIST]
(
    @GROUPID INT
)
RETURNS  TABLE 
AS
RETURN 
(
    WITH UsersGroups_CTE AS (
SELECT *
FROM [dbo].[UsersGroups]
WHERE ID = @GROUPID
UNION ALL
SELECT e.ID, e.GroupName, e.ParentID ,e.Status
FROM [dbo].[UsersGroups] e
INNER JOIN UsersGroups_CTE ucte ON ucte.ID = e.ParentID
)
SELECT *
FROM UsersGroups_CTE Where UsersGroups_CTE.Status = 1
); 

然后像这样在我的模型中使用

db.GET_USERGROUPLIST(1);

非常感谢 lontivero 的建议

【讨论】:

    猜你喜欢
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多