【问题标题】:Trying to use linq to search based on table with hierarchical data尝试使用 linq 基于具有分层数据的表进行搜索
【发布时间】:2009-10-12 15:38:30
【问题描述】:

重复 many times over(还有these

我有一个名为 Types 的表,其中包含以下列。

身份证 等级 姓名 ParentID(父行的ID)

还有一个名为 ParentObject 的表,其中包含以下列。 ID 类型ID

有4个不同的级别(可能会扩展到更多)。

如果我有

ID:1 等级:0 名称:Level0 父ID:空

ID:2 1级 名称:一级 父母 ID:1

ID:3 等级:2 名称:2级 父母 ID:2

ID:4 等级:3 名称:Level3 父母 ID:3

ID:5 等级:4 名称:4级 父母 ID:4

在 ParentObject 表中,我仅通过存储最低级别的 ID 来存储树。所以如果我的 ID 是 4,我知道树实际上是 Level0 -> Level1 -> Level2 -> Level3

基本上,我需要能够在所有对象中搜索某个类型或类型级别 2,例如在 linq 语句中。

说ParentObject表中存储的TypeID是4,所以Level3。

但我实际上想搜索所有级别 2 类型 ID 为 3 的 ParentObjects。

由于存储的 id 可能是 level1 或 level2 等,最好的方法是什么?

如果可能,最好在一个 linq 语句中。

【问题讨论】:

  • 我可以向您展示如何在存储过程中使用公用表表达式...不确定 linq tho :'(

标签: c# asp.net linq-to-entities hierarchical-data


【解决方案1】:

在 SQL (MS SQL Server 2005+) 中,您可以使用 Common Table Expression 来实现递归。 LINQ 不支持 CTE。有几个解决方法是创建存储过程并将其作为方法映射到您的数据上下文。

另一种解决方案是直接在 C# 代码中编写 SQL 并让 LINQ 执行它。见this

或者您可以编写一些 C# 代码,从您的数据中进行选择,直到不再有父 ID。一个粗略的例子是......

public partial class Form1 : Form
{
    public Form1()
    {
         IList<Data> data = new List<Data>();

        data.Add(new Data() { ID = 1, ParentID = 0, SomeData = "Example" });
        data.Add(new Data() { ID = 2, ParentID = 1, SomeData = "Another Example" });
        data.Add(new Data() { ID = 3, ParentID = 2, SomeData = "Example three" });
        data.Add(new Data() { ID = 4, ParentID = 3, SomeData = "Last example" });

        IList<Data> results = new List<Data>();

        Int32 parentID = 2;

        while (parentID > -1)
        {
            results.Add(
                data.Where(x => x.ParentID == parentID).Single()
            );

            parentID--;
        }
    }
}

public class Data
{
    public Int32 ID { get; set; }
    public Int32 ParentID { get; set; }
    public String SomeData { get; set; }
}

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2016-06-26
    • 2022-01-24
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 2020-06-20
    相关资源
    最近更新 更多