【问题标题】:SQL Function to LINQ to SQLSQL 函数到 LINQ to SQL
【发布时间】:2011-05-08 07:08:25
【问题描述】:

我想把下面的sql过程改成LINQ to SQL,请大家帮帮我。

http://vyaskn.tripod.com/hierarchies_in_sql_server_databases.htm


CREATE PROC dbo.ShowHierarchy (@Root int) AS
BEGIN
    SET NOCOUNT ON
    DECLARE @EmpID int, @EmpName varchar(30)

    SET @EmpName = (
        SELECT EmpName 
        FROM dbo.Emp 
        WHERE EmpID = @Root)

    PRINT REPLICATE('-', @@NESTLEVEL * 4) + @EmpName

    SET @EmpID = (
        SELECT MIN(EmpID) 
        FROM dbo.Emp 
        WHERE MgrID = @Root)

    WHILE @EmpID IS NOT NULL
    BEGIN
        EXEC dbo.ShowHierarchy @EmpID
        SET @EmpID = (
            SELECT MIN(EmpID) 
            FROM dbo.Emp 
            WHERE MgrID = @Root AND EmpID > @EmpID)
    END
END

【问题讨论】:

  • 你在说哪个“LINQ”? LINQ 到实体? LINQ 到对象? LINQ to SQL?
  • LINQ to SQL 感谢您的考虑
  • 请您检查一下我发布的网页。我有一个与该功能相同的要求,我想在分层视图中填充数据。到目前为止,我已经在 SQL Server 2005 中创建了相同的表、相同的数据、相同的功能(如在网页中)所以我需要用 C# 用 LINQ to SQL 编写相同的函数
  • 是的......那么到目前为止你写了什么代码来尝试这个。我们在这里帮助您解决编程问题。我们不是来做你所有的工作的。
  • 刚刚我在我的项目中创建了 OrgDetails.dbml 文件。并声明了它的对象。抱歉,我是 LINQ 的新手,所以我很困惑如何做到这一点。 OrgDetailsDataContext orgDeta = new OrgDetailsDataContext();

标签: c# .net sql-server linq-to-sql


【解决方案1】:

在 SQL Server 中执行查询的最有效方法是使用 Common Table Expressions (short CTE)。编写一个存储过程并从 Linq2Sql 中调用它。在纯 Linq 中没有真正有效的方法,除了 Steven 概述的方式(拉出雇主,然后递归调用函数),这将导致相当数量的数据库查询。

【讨论】:

    【解决方案2】:

    试试这个:

    public string[] ShowHierarchy(int employeeId)
    {
        using (var db = new YourDataContext("yourConStr"))
        {
            return ShowHierarchyRecursive(db, employeeId, 1)
                .ToArray();
        }
    }
    
    private IEnumerable<string> ShowHierarchyRecursive(
        YourDataContext db, int employeeId, int level)
    {
        // get the name of employeeId from db
    
        // yield return that name
    
        // get the list of people managed by that employeeId
    
        // foreach employee in that list,
        // call the ShowHierarchyRecursive, and
        // foreach item in the returned list yield return
        // that item.
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多