LINQ to SQL рекурсивная проблема - PullRequest
1 голос
/ 23 июня 2011

Я хочу преобразовать следующий запрос (который работает правильно) из синтаксиса запроса в синтаксис LINQ, но, похоже, я не могу понять его правильно:

SELECT
    [t1].[ID], [t1].[ParentID], [t1].[FolderName],
    [t1].[Purpose], [t1].[IsSystem],t1].IsHidden],
    [t1].[ChangeSrc], [t1].[SyncGUID], [t1].[CreationDBTimeStamp]
FROM [dbo].[FileStorageFolders] AS [t0]
INNER JOIN [dbo].[FileStorageFolders] AS [t1] ON ([t0].[ID]) = [t1][ParentID]
WHERE ([t1].[Purpose] = @p0)
    AND ([t1].[FolderName] = @p1)
    AND ([t0].[ParentID] IS NULL)
    AND ([t0].[Purpose] = @p2)

Я использую этот синтаксис LINQ, но результат всегда равен нулю:

 private static FileStorageFolder GetCapsuleContentFolder(FileStorageDataContext db)
    {    IQueryable<FileStorageFolder> source = (from dbfolder in db.FileStorageFolders
            join dbsubfolder in db.FileStorageFolders on
                new { ParentID = dbfolder.ID } equals
                new { ParentID = Convert.ToInt32(dbsubfolder.ParentID) }
            where
                dbfolder.ParentID == null &&
                dbfolder.Purpose == 'REPORT' &&
                dbsubfolder.Purpose == 'LayoutFolder' &&
                dbsubfolder.FolderName == 'LayoutReport'
            select new
                    {
                        dbsubfolder.ID,
                        ParentID = (System.Int32?)dbsubfolder.ParentID,
                        dbsubfolder.FolderName,
                        dbsubfolder.Purpose,
                        dbsubfolder.IsSystem,
                        pqrentID2 = dbfolder.ParentID,
                        Purpose2 = dbfolder.Purpose
                    }) as IQueryable<FileStorageFolder>;
return source.Single();
}

1 Ответ

0 голосов
/ 23 июня 2011

Есть ли у вас коллекция дочерних ползунков на родительском? Вы должны, если ваши отношения отображаются. В таком случае вы можете попробовать:

var query = from dbFolder in db.FileStorageFolders
            from subFolder in dbFolder.SubFolders // Here I use that mapped relations
            where ...
            select new { ... };

Проблема с вашим запросом в том, что вы создаете анонимный тип и конвертируете его в ваш тип - это невозможно. Кроме того, это не полный иерархический запрос (ваш SQL не так хорошо). Он выберет только один уровень подпапок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...