C# 如何按复杂的Url模式分组

C# 如何按复杂的Url模式分组,c#,sharepoint,linq-to-sql,group-by,C#,Sharepoint,Linq To Sql,Group By,我正在尝试按对象的属性Url对对象列表进行分组 为了更好地理解,以下是背景:我编写了一个脚本,它迭代Sharepoint场中的所有SPWebapplications,并获得从SPList到所有级别的所有权限。 此信息保存在此模式中: Url | Type | User | PermLevel | GrantedFrom -----------------------------------------------------

我正在尝试按对象的属性
Url
对对象列表进行分组

为了更好地理解,以下是背景:我编写了一个脚本,它迭代Sharepoint场中的所有
SPWebapplications
,并获得从
SPList
到所有级别的所有权限。 此信息保存在此模式中:

Url                |    Type   |    User    |    PermLevel     |    GrantedFrom
--------------------------------------------------------------------------------
http://farm/            SpWeb       User1          Full Control      Owner of SC
http://farm/orga        SPWeb       UserN          Read              Direct Assignment
等等。 现在作为一个人,我知道我有n个映射路径(
/mp1//mp2/
…),这表明这是指向SiteCollection的路径<代码>http://farm/project/PermissionAnalysis/将是一个网站集,而
http://farm/xyz/someList
将只是一个SPList

我的目标是按照它的SiteCollection对所有30万个对象进行分组,SiteCollection需要从它的URL进行解析

正如我所说,我知道哪些映射路径指向SiteCollection,因此我创建了一个数组:

var mappedPaths = new [] {"/mp1/", "/mp2/", };
我还知道,这些映射路径总是紧跟在
http://farm/
此外,
http://farm/
本身就是一个网站集

我不知道如何在Linq中构建合适的分组表达式来满足我的请求

目标是获得一个分组,其关键是:

http://farm/  //explicitly exclude every managed path
http://farm/mp1/
http://farm/mp2/
http://farm/mp3/
http://farm/mp4/
//编辑: 我忘了说我到目前为止得到了什么

var groupedByUrl = Permissions.ToList().GroupBy(p => p.Url.Contains(mappedPaths.FirstOrDefault()));

这给了我两把钥匙。True和False,其中False包含非映射路径的所有内容以及映射路径中的所有内容。

恐怕您只能在内存中使用
新Uri(url)
并获取Uri的选定部分来完成此操作。我目前正在编写扩展方法,它确定它是sitecollection还是sitecollection的子级。现在,它接受
rootWeb
Url和一个包含映射路径的字符串数组。到目前为止还有些问题。我不明白为什么不使用默认的SP方法,例如
SPWebApplication.Sites
来获取所有网站集,并使用该数组
SPSite.AllWebs
来获取所有网站。无需查看URL和URL模式。也
http://farm/
-您的意思很可能是“web应用程序”,因为服务器场没有URL。因为代码不会在任何Sharepoint上下文中执行。让我们假设,我拥有的唯一数据源是csv文件和我对农场体系结构的了解。通过
http://farm/
我指的是一个已就位的外部映射,也可能是指向网站集的url。