[英]SQL Function to LINQ to SQL
我想將以下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
在SQL Server中執行查詢的最有效方法是使用通用表表達式(簡稱CTE) 。 編寫一個存儲過程,並從Linq2Sql調用它。 除了Steven概述的方法(拔出雇主,然后遞歸調用該函數)會導致大量的數據庫查詢外,沒有一種真正有效的方法可以用純Linq做到。
嘗試這個:
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.
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.