gpt4 book ai didi

c# - 在 LINQ 中选择部分子字符串

转载 作者:太空宇宙 更新时间:2023-11-03 21:10:39 25 4
gpt4 key购买 nike

我有一个表,其中包含如下记录:

ID     VirtualPath
1 ~/Root/FirstFolder
2 ~/Root/FirstFile.ext
3 ~/Root/SecondFolder
4 ~/Root/SecondFolder/AnotherFile.ext
5 ~/Root/SecondFolder/YetAnotherFile.ext
6 ~/Root/SecondFolder/3rdLevelFolder
7 ~/Root/SecondFolder/3rdLevelFolder/StillAnotherFile.ext

我需要一个 LINQ 查询,所以当我传递参数“~/Root/SecondFolder/”时,我得到 #s 4,5 和 6,但不是 3 或 7。当你使用 Window 的资源管理器时它是镜像,(忽略 TreeView )你只能看到当前目录的内容。这可能吗?

以下有效,但我不知道如何将其转换为 LINQ,而且当我尝试在我的应用程序中运行 SQL 命令时,EF 不太喜欢它:

DECLARE @path NVARCHAR(255) = '~/Root/SecondFolder/%'

SELECT [ID],[VirtualPath]
FROM [dbo].[Files]
WHERE VirtualPath LIKE @path
AND LEN(LEFT([VirtualPath], LEN([VirtualPath]) - (CHARINDEX('/', REVERSE([VirtualPath])) - 1))) < (LEN(@path) + 1)

我无法在应用程序中过滤它,因为可能有数千条记录。

请提前告知并感谢您。

最佳答案

可能有更好的方法来编写此 LINQ express,但这应该可行:

string param = "~/Root/SecondFolder/";
string[] filter = files.Where(x => (x.StartsWith(param) && !x.Substring(param.Length, x.Length - param.Length).Contains('/'))).ToArray();

性能约束来自拆分字符串。这是我能想到的确保您位于正确目录中的唯一方法。

也许其他人可以想出更好的写法。

已编辑: Entity Framework 不支持拆分字符串。创建了一个更丑陋的查询,但仍然有效。

关于c# - 在 LINQ 中选择部分子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37974219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com