Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQLite DB:使用LINQ创建一个SQL语句,该语句使用同一个表两次,但没有交叉连接_C#_Entity Framework_Sqlite_Linq - Fatal编程技术网

C# SQLite DB:使用LINQ创建一个SQL语句,该语句使用同一个表两次,但没有交叉连接

C# SQLite DB:使用LINQ创建一个SQL语句,该语句使用同一个表两次,但没有交叉连接,c#,entity-framework,sqlite,linq,C#,Entity Framework,Sqlite,Linq,如何使用LINQ创建如下所示的SQL语句。主要问题是SQL语句的第二行。第3行和第4行不是问题所在 SELECT node.Label FROM MpttModel AS node, MpttModel AS parent WHERE node.Lft >= parent.Lft AND node.Lft <= parent.Rght AND parent.Id IN ( X'8761620FA1B0DD4AB852324AACE0FEF3' , X'45E88A219EE0A347

如何使用LINQ创建如下所示的SQL语句。主要问题是SQL语句的第二行。第3行和第4行不是问题所在

SELECT node.Label
FROM MpttModel AS node, MpttModel AS parent
WHERE node.Lft >= parent.Lft AND node.Lft <= parent.Rght
AND parent.Id IN ( X'8761620FA1B0DD4AB852324AACE0FEF3' , X'45E88A219EE0A347B51DFD8A6417C806' )
我发现下面的LINQ语句创建了一个带有交叉连接子句的SQL语句:

from node in DbSet
from parent in DbSet
where node.Lft >= parent.Lft && node.Lft <= parent.Rght && ids.Contains(parent.Id)
select node

SELECT 
[Extent1].*
FROM     [MpttModel] AS [Extent1] CROSS JOIN [MpttModel] AS [Extent2]
WHERE (([Extent1].[Discriminator] = 'WorkEstimationStructure') AND ([Extent2].[Discriminator] = 'WorkEstimationStructure')) AND ((([Extent1].[Lft] >= [Extent2].[Lft]) AND ([Extent1].[Lft] <= [Extent2].[Rght])) 
AND ([Extent2].[Id] IN ( X'8761620FA1B0DD4AB852324AACE0FEF3' , X'45E88A219EE0A347B51DFD8A6417C806' , X'D4B4A84AE2C8D346A6EB4BE649009353' , X'79791D780A820D47A6C643049DD2EDAC' , X'6D87228654D58047ACB0C9883BBEC18F' , X'A92CBE900AFE5F4E8601A3138D5868F2' , X'8033A7D64861FD48B7AF10DB3BC94317' , X'78EF4038766C784C81C80B8904B5735A' , X'37251B4BAC5D2A42A1F4C22145C03E1B' , X'49CD6E59D0E9E64B8B672A497C408B99' , X'C237D7A22A75714BB0D9EA7F6A3771AF' , X'F13F9BCC255A7C4DB65371A3FB35F6AD' , X'6A0B11D63C954E4F9FC4F50E034F3848' , X'48A06CE22403F84382C8769FBDCAA776' , X'F212153580158741AFF56513FEA97EB7' , X'8A21DB4B1573454E8A0AB53799508887' , X'DD15497B20BBFC4692BA263D8BE54018' , X'621922914C5F4D488AEF671CE1F3B64F' , X'5091809E6C708B48AE1F73A8773658B3' , X'AF0628D49152404FA7B7C50AE249378A' , X'62442AD65175F54E8F93D11579A3F4F4' , X'951E0010A8E4C249B4911F9DA2EE3DC8' , X'43F3B828F1D1FD4282059664973E3CDB' , X'D6365B468A01D34EA0ACF0FFC4626D02' , X'8F4D77A09686C5428234C071916AF5D5' , X'1C34C9B2B8E1404BB37F3CBB61B7E52A' , X'68F96BB653267B4AB1F96F0D55144B2B' , X'764F15B9C92C9B4CA83C30A7A95D65A0' , X'00000000000000000000000000004421' , X'00000000000000000000000000005633' , X'6070CA1A4B752B43BDEB4B4485648D60' , X'381CDA5510E81146B5AE62B6845A386B' , X'D20ED55AF5229141915156CFC40BDB58' , X'0FCE62A75BD86F4794EBFCF191552A31' , X'ABD4F4B7D6185141888AF4D99CBBEE57' , X'BC27D6D8BE13704BAFECA931763E3E09' , X'9B2C09FEDAEA054ABB7AA848F03C88FD' , X'89A6A808AF58EA40B206D3F20CFAB87D' , X'7BA1431A374C9749A6EAA1AC9C54C976' , X'DA48285B4FD885499E4897BBAA05D5B3' , X'8081F1BE856DF447AC36142FFF07C8D1' , X'7A2BDCC438EFD3468DE129BD40D11826' , X'F99832C5398C25499520CB99210B6E15' , X'8A34A4D676337D41879B435C8FC9393E' , X'2B29F4CDB6C06147812E70205A641B3E' , X'19228B5D9642C14C905DD225AD8F00AD' , X'63061BC02F37404E8F841A600AEAFDBE' , X'79E8AC96B98C914490557327FE8AD99F' , X'185C5BB3FC2D7E4BB81DFB555DE4012E' , X'82B0F0107AA4394BBD9E2525E5DCAF9D' , X'4E240A379E2305438DFFC4AF00CAB274' , X'FADFDC43A4FB4B459B08DBD83C5B4496' , X'DE02C14D47254346BB8734BF028BBDDC' , X'2E4A5A6A67100D4A8E8C35998C36AA91' , X'12A71EAFE79BBF4DADB9BAFA45DA1A4E' , X'3C22F7AF7B34A1449DEDBAE6CE4EA5D4' , X'8DBE21EB670C5E40AAB54F3F1913B32B' , X'9857BEEE9353194281A9FC257ED7994F' , X'D0EC2B3F1A676244ADD6C82AABE34D84' , X'15869193081463498E00C428A14711AF' , X'2DD95FBD59069549A6F25A3B47974DAE' , X'CCFC9753A321B146B584CB13F4A26745' , X'9743F50C3C2F08428258B181D407391E' , X'1DACD568C2E88F49BD5C980E0EFCDF33' , X'69BFBDC788B77742A7BF60F6E7992CF9' , X'0828AE10A5058B4991598E58A5B27738' , X'B159FABDB2E05945BD45D3F7E16FE60A' , X'D34E4706E86AEA4FA7976A477C4A486D' , X'2CF9198F2FE33A40B3E52617D6C33641' , X'816F44DB755FF647A8BB27F343D596DF' , X'ABE5A80D135D604CB9063876CBD1193B' , X'C523FA22DF508F4B936ACB519C8EDA4B' , X'87D03027E667D44BB9EEAF8BA0253E05' , X'4B2AAC361F376D498361C2E760745A01' , X'64455E4705D74448B067058320091871' , X'EF86315366DB9540B09CEB4F8D985D13' , X'0F0EEF5CB653244AAADDBDDC78AB655A' , X'E2E4907477F39A46AE32044E8C2C42C6' , X'5FF7A27C872895479868445CA7D73237' , X'106CB4897B8A0B4AB2EABC61503BCB0E' , X'2CD76B9C3C4AE042AD7B12E8F4D27469' , X'B9491AB25CC74C4CADF312B6F7FEA384' , X'0B55BEBEE02A804A9B2745855222FDEE' , X'1CC879BFC5ED3743B658E45EDEA9ECC6' , X'E29DDAE4E282E1469835802FC781A049' , X'1662D9E7A56F2E45A961C03E3AD49022' , X'95E0BFF84497A84886978173FC576A69' , X'035CF8001385C64BAA4C0666218B36A2' , X'B211CB09DC354E42BFF44BDCA86D0E34' , X'618083225CC69A42800F7C9DFF5C5081' , X'F250803712AEC148A2443F5AE3ED89DD' , X'FD83B63D332E334193043F18DF2F7665' , X'4AFE5C40C7F36947A7D0D9B853A975DE' , X'3EC8844DAD9D214BA1377A3742AEF267' , X'AF868F584C84414E9250AF2696032FE7' , X'8A27895FB4B17643AC836D62EA2B35E8' , X'8015A6688AF73D4ABEC7EDCCBC62FDCA' , X'AB2FFB71D7690F4EA0494B4AD9248D2D' , X'BEAB2E815F58F24AB7037B435E88BE67' , X'BC4267872ACAE841BC1F99495FDCBD67' , X'3C3032BAFBAC0745B977984238824F24' , X'529CAFBDE23120418B46BEC459445750' , X'9D7665C2286ABA419F464F657A17CFCE' , X'8EE875D745F5244F934B967FFB08BB94' , X'014336DF050FC643B22EEA2CAD4007BA' , X'2BD6A2F9C532E246AF5D52BD2977CC2C' , X'A5F6952854E8414EAB5243866D51299C' , X'7B84D38E009DE543AFA57551020784E4' , X'E6F711AB04ECD9489F6841990ADB588B' )))
SELECT 
[Extent1].*
FROM     [MpttModel] AS [Extent1], [MpttModel] AS [Extent2]
WHERE (([Extent1].[Discriminator] = 'WorkEstimationStructure') AND ([Extent2].[Discriminator] = 'WorkEstimationStructure')) AND ((([Extent1].[Lft] >= [Extent2].[Lft]) AND ([Extent1].[Lft] <= [Extent2].[Rght])) 
AND ([Extent2].[Id] IN ( X'8761620FA1B0DD4AB852324AACE0FEF3' , X'45E88A219EE0A347B51DFD8A6417C806' , X'D4B4A84AE2C8D346A6EB4BE649009353' , X'79791D780A820D47A6C643049DD2EDAC' , X'6D87228654D58047ACB0C9883BBEC18F' , X'A92CBE900AFE5F4E8601A3138D5868F2' , X'8033A7D64861FD48B7AF10DB3BC94317' , X'78EF4038766C784C81C80B8904B5735A' , X'37251B4BAC5D2A42A1F4C22145C03E1B' , X'49CD6E59D0E9E64B8B672A497C408B99' , X'C237D7A22A75714BB0D9EA7F6A3771AF' , X'F13F9BCC255A7C4DB65371A3FB35F6AD' , X'6A0B11D63C954E4F9FC4F50E034F3848' , X'48A06CE22403F84382C8769FBDCAA776' , X'F212153580158741AFF56513FEA97EB7' , X'8A21DB4B1573454E8A0AB53799508887' , X'DD15497B20BBFC4692BA263D8BE54018' , X'621922914C5F4D488AEF671CE1F3B64F' , X'5091809E6C708B48AE1F73A8773658B3' , X'AF0628D49152404FA7B7C50AE249378A' , X'62442AD65175F54E8F93D11579A3F4F4' , X'951E0010A8E4C249B4911F9DA2EE3DC8' , X'43F3B828F1D1FD4282059664973E3CDB' , X'D6365B468A01D34EA0ACF0FFC4626D02' , X'8F4D77A09686C5428234C071916AF5D5' , X'1C34C9B2B8E1404BB37F3CBB61B7E52A' , X'68F96BB653267B4AB1F96F0D55144B2B' , X'764F15B9C92C9B4CA83C30A7A95D65A0' , X'00000000000000000000000000004421' , X'00000000000000000000000000005633' , X'6070CA1A4B752B43BDEB4B4485648D60' , X'381CDA5510E81146B5AE62B6845A386B' , X'D20ED55AF5229141915156CFC40BDB58' , X'0FCE62A75BD86F4794EBFCF191552A31' , X'ABD4F4B7D6185141888AF4D99CBBEE57' , X'BC27D6D8BE13704BAFECA931763E3E09' , X'9B2C09FEDAEA054ABB7AA848F03C88FD' , X'89A6A808AF58EA40B206D3F20CFAB87D' , X'7BA1431A374C9749A6EAA1AC9C54C976' , X'DA48285B4FD885499E4897BBAA05D5B3' , X'8081F1BE856DF447AC36142FFF07C8D1' , X'7A2BDCC438EFD3468DE129BD40D11826' , X'F99832C5398C25499520CB99210B6E15' , X'8A34A4D676337D41879B435C8FC9393E' , X'2B29F4CDB6C06147812E70205A641B3E' , X'19228B5D9642C14C905DD225AD8F00AD' , X'63061BC02F37404E8F841A600AEAFDBE' , X'79E8AC96B98C914490557327FE8AD99F' , X'185C5BB3FC2D7E4BB81DFB555DE4012E' , X'82B0F0107AA4394BBD9E2525E5DCAF9D' , X'4E240A379E2305438DFFC4AF00CAB274' , X'FADFDC43A4FB4B459B08DBD83C5B4496' , X'DE02C14D47254346BB8734BF028BBDDC' , X'2E4A5A6A67100D4A8E8C35998C36AA91' , X'12A71EAFE79BBF4DADB9BAFA45DA1A4E' , X'3C22F7AF7B34A1449DEDBAE6CE4EA5D4' , X'8DBE21EB670C5E40AAB54F3F1913B32B' , X'9857BEEE9353194281A9FC257ED7994F' , X'D0EC2B3F1A676244ADD6C82AABE34D84' , X'15869193081463498E00C428A14711AF' , X'2DD95FBD59069549A6F25A3B47974DAE' , X'CCFC9753A321B146B584CB13F4A26745' , X'9743F50C3C2F08428258B181D407391E' , X'1DACD568C2E88F49BD5C980E0EFCDF33' , X'69BFBDC788B77742A7BF60F6E7992CF9' , X'0828AE10A5058B4991598E58A5B27738' , X'B159FABDB2E05945BD45D3F7E16FE60A' , X'D34E4706E86AEA4FA7976A477C4A486D' , X'2CF9198F2FE33A40B3E52617D6C33641' , X'816F44DB755FF647A8BB27F343D596DF' , X'ABE5A80D135D604CB9063876CBD1193B' , X'C523FA22DF508F4B936ACB519C8EDA4B' , X'87D03027E667D44BB9EEAF8BA0253E05' , X'4B2AAC361F376D498361C2E760745A01' , X'64455E4705D74448B067058320091871' , X'EF86315366DB9540B09CEB4F8D985D13' , X'0F0EEF5CB653244AAADDBDDC78AB655A' , X'E2E4907477F39A46AE32044E8C2C42C6' , X'5FF7A27C872895479868445CA7D73237' , X'106CB4897B8A0B4AB2EABC61503BCB0E' , X'2CD76B9C3C4AE042AD7B12E8F4D27469' , X'B9491AB25CC74C4CADF312B6F7FEA384' , X'0B55BEBEE02A804A9B2745855222FDEE' , X'1CC879BFC5ED3743B658E45EDEA9ECC6' , X'E29DDAE4E282E1469835802FC781A049' , X'1662D9E7A56F2E45A961C03E3AD49022' , X'95E0BFF84497A84886978173FC576A69' , X'035CF8001385C64BAA4C0666218B36A2' , X'B211CB09DC354E42BFF44BDCA86D0E34' , X'618083225CC69A42800F7C9DFF5C5081' , X'F250803712AEC148A2443F5AE3ED89DD' , X'FD83B63D332E334193043F18DF2F7665' , X'4AFE5C40C7F36947A7D0D9B853A975DE' , X'3EC8844DAD9D214BA1377A3742AEF267' , X'AF868F584C84414E9250AF2696032FE7' , X'8A27895FB4B17643AC836D62EA2B35E8' , X'8015A6688AF73D4ABEC7EDCCBC62FDCA' , X'AB2FFB71D7690F4EA0494B4AD9248D2D' , X'BEAB2E815F58F24AB7037B435E88BE67' , X'BC4267872ACAE841BC1F99495FDCBD67' , X'3C3032BAFBAC0745B977984238824F24' , X'529CAFBDE23120418B46BEC459445750' , X'9D7665C2286ABA419F464F657A17CFCE' , X'8EE875D745F5244F934B967FFB08BB94' , X'014336DF050FC643B22EEA2CAD4007BA' , X'2BD6A2F9C532E246AF5D52BD2977CC2C' , X'A5F6952854E8414EAB5243866D51299C' , X'7B84D38E009DE543AFA57551020784E4' , X'E6F711AB04ECD9489F6841990ADB588B' )))
在我的SQLite数据库中执行此SQL语句大约需要50秒!如果我用一个“,”字符替换交叉连接子句,那么几乎相同的SQL语句只需不到一秒~750毫秒的时间。这里有什么问题

没有交叉联接子句的优化SQL语句:

from node in DbSet
from parent in DbSet
where node.Lft >= parent.Lft && node.Lft <= parent.Rght && ids.Contains(parent.Id)
select node

SELECT 
[Extent1].*
FROM     [MpttModel] AS [Extent1] CROSS JOIN [MpttModel] AS [Extent2]
WHERE (([Extent1].[Discriminator] = 'WorkEstimationStructure') AND ([Extent2].[Discriminator] = 'WorkEstimationStructure')) AND ((([Extent1].[Lft] >= [Extent2].[Lft]) AND ([Extent1].[Lft] <= [Extent2].[Rght])) 
AND ([Extent2].[Id] IN ( X'8761620FA1B0DD4AB852324AACE0FEF3' , X'45E88A219EE0A347B51DFD8A6417C806' , X'D4B4A84AE2C8D346A6EB4BE649009353' , X'79791D780A820D47A6C643049DD2EDAC' , X'6D87228654D58047ACB0C9883BBEC18F' , X'A92CBE900AFE5F4E8601A3138D5868F2' , X'8033A7D64861FD48B7AF10DB3BC94317' , X'78EF4038766C784C81C80B8904B5735A' , X'37251B4BAC5D2A42A1F4C22145C03E1B' , X'49CD6E59D0E9E64B8B672A497C408B99' , X'C237D7A22A75714BB0D9EA7F6A3771AF' , X'F13F9BCC255A7C4DB65371A3FB35F6AD' , X'6A0B11D63C954E4F9FC4F50E034F3848' , X'48A06CE22403F84382C8769FBDCAA776' , X'F212153580158741AFF56513FEA97EB7' , X'8A21DB4B1573454E8A0AB53799508887' , X'DD15497B20BBFC4692BA263D8BE54018' , X'621922914C5F4D488AEF671CE1F3B64F' , X'5091809E6C708B48AE1F73A8773658B3' , X'AF0628D49152404FA7B7C50AE249378A' , X'62442AD65175F54E8F93D11579A3F4F4' , X'951E0010A8E4C249B4911F9DA2EE3DC8' , X'43F3B828F1D1FD4282059664973E3CDB' , X'D6365B468A01D34EA0ACF0FFC4626D02' , X'8F4D77A09686C5428234C071916AF5D5' , X'1C34C9B2B8E1404BB37F3CBB61B7E52A' , X'68F96BB653267B4AB1F96F0D55144B2B' , X'764F15B9C92C9B4CA83C30A7A95D65A0' , X'00000000000000000000000000004421' , X'00000000000000000000000000005633' , X'6070CA1A4B752B43BDEB4B4485648D60' , X'381CDA5510E81146B5AE62B6845A386B' , X'D20ED55AF5229141915156CFC40BDB58' , X'0FCE62A75BD86F4794EBFCF191552A31' , X'ABD4F4B7D6185141888AF4D99CBBEE57' , X'BC27D6D8BE13704BAFECA931763E3E09' , X'9B2C09FEDAEA054ABB7AA848F03C88FD' , X'89A6A808AF58EA40B206D3F20CFAB87D' , X'7BA1431A374C9749A6EAA1AC9C54C976' , X'DA48285B4FD885499E4897BBAA05D5B3' , X'8081F1BE856DF447AC36142FFF07C8D1' , X'7A2BDCC438EFD3468DE129BD40D11826' , X'F99832C5398C25499520CB99210B6E15' , X'8A34A4D676337D41879B435C8FC9393E' , X'2B29F4CDB6C06147812E70205A641B3E' , X'19228B5D9642C14C905DD225AD8F00AD' , X'63061BC02F37404E8F841A600AEAFDBE' , X'79E8AC96B98C914490557327FE8AD99F' , X'185C5BB3FC2D7E4BB81DFB555DE4012E' , X'82B0F0107AA4394BBD9E2525E5DCAF9D' , X'4E240A379E2305438DFFC4AF00CAB274' , X'FADFDC43A4FB4B459B08DBD83C5B4496' , X'DE02C14D47254346BB8734BF028BBDDC' , X'2E4A5A6A67100D4A8E8C35998C36AA91' , X'12A71EAFE79BBF4DADB9BAFA45DA1A4E' , X'3C22F7AF7B34A1449DEDBAE6CE4EA5D4' , X'8DBE21EB670C5E40AAB54F3F1913B32B' , X'9857BEEE9353194281A9FC257ED7994F' , X'D0EC2B3F1A676244ADD6C82AABE34D84' , X'15869193081463498E00C428A14711AF' , X'2DD95FBD59069549A6F25A3B47974DAE' , X'CCFC9753A321B146B584CB13F4A26745' , X'9743F50C3C2F08428258B181D407391E' , X'1DACD568C2E88F49BD5C980E0EFCDF33' , X'69BFBDC788B77742A7BF60F6E7992CF9' , X'0828AE10A5058B4991598E58A5B27738' , X'B159FABDB2E05945BD45D3F7E16FE60A' , X'D34E4706E86AEA4FA7976A477C4A486D' , X'2CF9198F2FE33A40B3E52617D6C33641' , X'816F44DB755FF647A8BB27F343D596DF' , X'ABE5A80D135D604CB9063876CBD1193B' , X'C523FA22DF508F4B936ACB519C8EDA4B' , X'87D03027E667D44BB9EEAF8BA0253E05' , X'4B2AAC361F376D498361C2E760745A01' , X'64455E4705D74448B067058320091871' , X'EF86315366DB9540B09CEB4F8D985D13' , X'0F0EEF5CB653244AAADDBDDC78AB655A' , X'E2E4907477F39A46AE32044E8C2C42C6' , X'5FF7A27C872895479868445CA7D73237' , X'106CB4897B8A0B4AB2EABC61503BCB0E' , X'2CD76B9C3C4AE042AD7B12E8F4D27469' , X'B9491AB25CC74C4CADF312B6F7FEA384' , X'0B55BEBEE02A804A9B2745855222FDEE' , X'1CC879BFC5ED3743B658E45EDEA9ECC6' , X'E29DDAE4E282E1469835802FC781A049' , X'1662D9E7A56F2E45A961C03E3AD49022' , X'95E0BFF84497A84886978173FC576A69' , X'035CF8001385C64BAA4C0666218B36A2' , X'B211CB09DC354E42BFF44BDCA86D0E34' , X'618083225CC69A42800F7C9DFF5C5081' , X'F250803712AEC148A2443F5AE3ED89DD' , X'FD83B63D332E334193043F18DF2F7665' , X'4AFE5C40C7F36947A7D0D9B853A975DE' , X'3EC8844DAD9D214BA1377A3742AEF267' , X'AF868F584C84414E9250AF2696032FE7' , X'8A27895FB4B17643AC836D62EA2B35E8' , X'8015A6688AF73D4ABEC7EDCCBC62FDCA' , X'AB2FFB71D7690F4EA0494B4AD9248D2D' , X'BEAB2E815F58F24AB7037B435E88BE67' , X'BC4267872ACAE841BC1F99495FDCBD67' , X'3C3032BAFBAC0745B977984238824F24' , X'529CAFBDE23120418B46BEC459445750' , X'9D7665C2286ABA419F464F657A17CFCE' , X'8EE875D745F5244F934B967FFB08BB94' , X'014336DF050FC643B22EEA2CAD4007BA' , X'2BD6A2F9C532E246AF5D52BD2977CC2C' , X'A5F6952854E8414EAB5243866D51299C' , X'7B84D38E009DE543AFA57551020784E4' , X'E6F711AB04ECD9489F6841990ADB588B' )))
SELECT 
[Extent1].*
FROM     [MpttModel] AS [Extent1], [MpttModel] AS [Extent2]
WHERE (([Extent1].[Discriminator] = 'WorkEstimationStructure') AND ([Extent2].[Discriminator] = 'WorkEstimationStructure')) AND ((([Extent1].[Lft] >= [Extent2].[Lft]) AND ([Extent1].[Lft] <= [Extent2].[Rght])) 
AND ([Extent2].[Id] IN ( X'8761620FA1B0DD4AB852324AACE0FEF3' , X'45E88A219EE0A347B51DFD8A6417C806' , X'D4B4A84AE2C8D346A6EB4BE649009353' , X'79791D780A820D47A6C643049DD2EDAC' , X'6D87228654D58047ACB0C9883BBEC18F' , X'A92CBE900AFE5F4E8601A3138D5868F2' , X'8033A7D64861FD48B7AF10DB3BC94317' , X'78EF4038766C784C81C80B8904B5735A' , X'37251B4BAC5D2A42A1F4C22145C03E1B' , X'49CD6E59D0E9E64B8B672A497C408B99' , X'C237D7A22A75714BB0D9EA7F6A3771AF' , X'F13F9BCC255A7C4DB65371A3FB35F6AD' , X'6A0B11D63C954E4F9FC4F50E034F3848' , X'48A06CE22403F84382C8769FBDCAA776' , X'F212153580158741AFF56513FEA97EB7' , X'8A21DB4B1573454E8A0AB53799508887' , X'DD15497B20BBFC4692BA263D8BE54018' , X'621922914C5F4D488AEF671CE1F3B64F' , X'5091809E6C708B48AE1F73A8773658B3' , X'AF0628D49152404FA7B7C50AE249378A' , X'62442AD65175F54E8F93D11579A3F4F4' , X'951E0010A8E4C249B4911F9DA2EE3DC8' , X'43F3B828F1D1FD4282059664973E3CDB' , X'D6365B468A01D34EA0ACF0FFC4626D02' , X'8F4D77A09686C5428234C071916AF5D5' , X'1C34C9B2B8E1404BB37F3CBB61B7E52A' , X'68F96BB653267B4AB1F96F0D55144B2B' , X'764F15B9C92C9B4CA83C30A7A95D65A0' , X'00000000000000000000000000004421' , X'00000000000000000000000000005633' , X'6070CA1A4B752B43BDEB4B4485648D60' , X'381CDA5510E81146B5AE62B6845A386B' , X'D20ED55AF5229141915156CFC40BDB58' , X'0FCE62A75BD86F4794EBFCF191552A31' , X'ABD4F4B7D6185141888AF4D99CBBEE57' , X'BC27D6D8BE13704BAFECA931763E3E09' , X'9B2C09FEDAEA054ABB7AA848F03C88FD' , X'89A6A808AF58EA40B206D3F20CFAB87D' , X'7BA1431A374C9749A6EAA1AC9C54C976' , X'DA48285B4FD885499E4897BBAA05D5B3' , X'8081F1BE856DF447AC36142FFF07C8D1' , X'7A2BDCC438EFD3468DE129BD40D11826' , X'F99832C5398C25499520CB99210B6E15' , X'8A34A4D676337D41879B435C8FC9393E' , X'2B29F4CDB6C06147812E70205A641B3E' , X'19228B5D9642C14C905DD225AD8F00AD' , X'63061BC02F37404E8F841A600AEAFDBE' , X'79E8AC96B98C914490557327FE8AD99F' , X'185C5BB3FC2D7E4BB81DFB555DE4012E' , X'82B0F0107AA4394BBD9E2525E5DCAF9D' , X'4E240A379E2305438DFFC4AF00CAB274' , X'FADFDC43A4FB4B459B08DBD83C5B4496' , X'DE02C14D47254346BB8734BF028BBDDC' , X'2E4A5A6A67100D4A8E8C35998C36AA91' , X'12A71EAFE79BBF4DADB9BAFA45DA1A4E' , X'3C22F7AF7B34A1449DEDBAE6CE4EA5D4' , X'8DBE21EB670C5E40AAB54F3F1913B32B' , X'9857BEEE9353194281A9FC257ED7994F' , X'D0EC2B3F1A676244ADD6C82AABE34D84' , X'15869193081463498E00C428A14711AF' , X'2DD95FBD59069549A6F25A3B47974DAE' , X'CCFC9753A321B146B584CB13F4A26745' , X'9743F50C3C2F08428258B181D407391E' , X'1DACD568C2E88F49BD5C980E0EFCDF33' , X'69BFBDC788B77742A7BF60F6E7992CF9' , X'0828AE10A5058B4991598E58A5B27738' , X'B159FABDB2E05945BD45D3F7E16FE60A' , X'D34E4706E86AEA4FA7976A477C4A486D' , X'2CF9198F2FE33A40B3E52617D6C33641' , X'816F44DB755FF647A8BB27F343D596DF' , X'ABE5A80D135D604CB9063876CBD1193B' , X'C523FA22DF508F4B936ACB519C8EDA4B' , X'87D03027E667D44BB9EEAF8BA0253E05' , X'4B2AAC361F376D498361C2E760745A01' , X'64455E4705D74448B067058320091871' , X'EF86315366DB9540B09CEB4F8D985D13' , X'0F0EEF5CB653244AAADDBDDC78AB655A' , X'E2E4907477F39A46AE32044E8C2C42C6' , X'5FF7A27C872895479868445CA7D73237' , X'106CB4897B8A0B4AB2EABC61503BCB0E' , X'2CD76B9C3C4AE042AD7B12E8F4D27469' , X'B9491AB25CC74C4CADF312B6F7FEA384' , X'0B55BEBEE02A804A9B2745855222FDEE' , X'1CC879BFC5ED3743B658E45EDEA9ECC6' , X'E29DDAE4E282E1469835802FC781A049' , X'1662D9E7A56F2E45A961C03E3AD49022' , X'95E0BFF84497A84886978173FC576A69' , X'035CF8001385C64BAA4C0666218B36A2' , X'B211CB09DC354E42BFF44BDCA86D0E34' , X'618083225CC69A42800F7C9DFF5C5081' , X'F250803712AEC148A2443F5AE3ED89DD' , X'FD83B63D332E334193043F18DF2F7665' , X'4AFE5C40C7F36947A7D0D9B853A975DE' , X'3EC8844DAD9D214BA1377A3742AEF267' , X'AF868F584C84414E9250AF2696032FE7' , X'8A27895FB4B17643AC836D62EA2B35E8' , X'8015A6688AF73D4ABEC7EDCCBC62FDCA' , X'AB2FFB71D7690F4EA0494B4AD9248D2D' , X'BEAB2E815F58F24AB7037B435E88BE67' , X'BC4267872ACAE841BC1F99495FDCBD67' , X'3C3032BAFBAC0745B977984238824F24' , X'529CAFBDE23120418B46BEC459445750' , X'9D7665C2286ABA419F464F657A17CFCE' , X'8EE875D745F5244F934B967FFB08BB94' , X'014336DF050FC643B22EEA2CAD4007BA' , X'2BD6A2F9C532E246AF5D52BD2977CC2C' , X'A5F6952854E8414EAB5243866D51299C' , X'7B84D38E009DE543AFA57551020784E4' , X'E6F711AB04ECD9489F6841990ADB588B' )))

我的数据库表MPTTModel包含大约10000行。

c实体中的查询必须与SQL Server查询完全相同。您可以使用以下类似代码的单一代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication152
{
    class Program
    {
        static void Main(string[] args)
        {
            DataBase db = new DataBase();

            string[] labels = db.MpttModel.Where(x => (x.Lft.CompareTo(x.Rght) <= 0) && (x.Id.CompareTo("8761620FA1B0DD4AB852324AACE0FEF3") >= 0) && (x.Id.CompareTo("45E88A219EE0A347B51DFD8A6417C806") <=0)).Select(x => x.Label).ToArray();
        }
    }
    public class DataBase
    {
        public List<MpttModel> MpttModel { get; set; } 
    }
    public class MpttModel
    {
        public string Label { get; set; }
        public string Lft { get; set; }
        public string Rght { get; set; }
        public string Id { get; set; }
    }
}
方法1: 如果MpttModel数据库表没有自引用列,则使用正常交叉联接,如下所示:

var ids = new List<string> { "8761620FA1B0DD4AB852324AACE0FEF3", "45E88A219EE0A347B51DFD8A6417C806" };

var results = db.MpttModels.SelectMany(n => db.MpttModels.Select(p => new
{
    n, p
})).Where(a => ids.Contains(a.p.Id) && a.n.Lft >= a.p.Lft && a.n.Lft <= a.p.Right);

方法2: 您可以使用父列修改数据库表,并按以下方式修改c模型以表示父子关系:

public class MpttModel
{
    public int MpttModelId { get; set; }

    public int? ParentId { get; set; }

    [ForeignKey("ParentId")]
    public virtual MpttModel Parent { get; set; }

    public virtual ICollection<MpttModel> Children { get; set; }
}

同样可以通过fluent API来实现。

我可以解决交叉连接子句的性能问题。性能问题只发生在SQLite数据库上。MS SQL Server不受影响。如文档中所述,性能问题可以通过更改相关表的顺序来解决

之前的LINQ语句存在性能问题。查询耗时约50秒:

from node in DbSet
from parent in DbSet
where node.Lft >= parent.Lft && node.Lft <= parent.Rght && ids.Contains(parent.Id)
select node
解决问题的新LINQ声明。查询时间不到1秒:

from parent in DbSet
from node in DbSet
where node.Lft >= parent.Lft && node.Lft <= parent.Rght && ids.Contains(parent.Id)
select node

这可以通过自参考导航属性来实现。您使用的是哪个EF版本?我使用的是Entity Framework 6.3。请注意from子句有两个表:from MpttModel作为节点,MpttModel作为父表。这两个表只是相同数据的不同实例。实体不需要两个实例来进行筛选。请参阅:此查询不正确,因为原始查询中的节点和父节点可能是不同的行,但此处它们必须相同。在这种情况下,可以简化原始查询,从MpttModel中选择node.label作为node,其中node.Lft=[…]和node.Id