我有这么多形式的数据:
public class Permission
{
public string Url { get; set; }
public string User { get; set; }
public string PermissionLevel { get; set; }
}
第二个集合为List<string> SiteCollections
。样本数据:
http://domain/project/1
http://domain/project/2
http://domain/project/3
http://domain/project/4
http://domain/project/5
现在,我的目标是按List<Permission> Permissions
过滤此User
。所以这给了我
var FilteredAndGrouped = data.Where(u => u.User == @"domain\username")
在此之后,我想通过其部分网址对此结果进行分组。每个权限网址都以列表SiteCollections中的一个网址开头。
如果已经开始
var filteredAndGrouped = data.Where(d => d.User == @"domain\User")
.GroupBy (d => SiteCollections.Any (sc => sc.StartsWith(d.Url)))
这导致使用键true / false进行分组,并且只有列表SiteCollections
中令人兴奋的URL才会在键为true的分组中。
我想要的是一个分组,其中密钥是列表SiteCollections
中的网址,而权限网址需要以分组的密钥开头。它不需要等于它。
最后我需要这种形式的结果:
Key: http://domain/project/1
Permission 1 (Url: http://domain/project/1/xyz/xyz)
Permission 3 (Url: http://domain/project/1/xyzz/xqeqyz)
Permission 7 (Url: http://domain/project/1/xadadyz/xadadyz)
Key: http://domain/project/2
Permission 2 (Url: http://domain/project/2/adyz/xdyz)
Permission 4 (Url: http://domain/project/2/a2dyz/xdyz)
Permission 21(Url: http://domain/project/2/a22dyz/xdyz)
Key: http://domain/project/3
Permission 22 (Url: ...
答案 0 :(得分:1)
var groupped = permissions
.GroupBy(x => SiteCollections.FirstOrDefault(u => x.Url.StartsWith(u)))
.Select(x => new { Key = x.Key, Permissions = x.ToArray() })
.ToArray();
结果可能包含null
键,这意味着SiteCollections
中的网址不存在。