为什么Reflector ver 7产生了这样错误的Linq代码?

本文关键字:错误 Linq 代码 Reflector ver 产生了 为什么 | 更新日期: 2023-09-27 18:08:09

private FileStorageFolder GetCapsuleContentFolder(FileStorageDataContext db)
{
    IQueryable<FileStorageFolder> source = from dbFolder in db.FileStorageFolders
        where (dbFolder.ParentID == null) && (dbFolder.Purpose == reportFolderPurpose)
        select dbFolder into dbFolder
        join dbSubFolder in db.FileStorageFolders on dbFolder.ID equals 
        dbSubFolder.ParentID into dbSubFolder
         where (dbSubFolder.Purpose == capsulelayoutFolderPurpose) && 
        (dbSubFolder.FolderName == capsuleReportContent)
         select dbSubFolder;
Instrument.Assert(source.Count<FileStorageFolder>() == 1);
return source.Single<FileStorageFolder>();
}

语法不正确。有人知道如何在此基础上创建IQueryable typed吗?

为什么Reflector ver 7产生了这样错误的Linq代码?

如果有问题,试着把"Optimisation"的设置调小到。net 2.0。这将被迫显示显式的.Select(...)等。这将生成正确的c#,但没有LINQ风格。

但是,请注意,它也可能颠倒表面上的调用顺序,因为它可能会使用显式的扩展方法表示。但是,代码应该是等效的。