我有一份特权列表. Privilege类有四个属性:Type,AccessType,Value和Action. 如果有多个权限,其中Type,AccessType和Value相同,但我想要抛出异常,但操作是不同的. 因此,例如p1和p2的列表会抛出异常:
如果有多个权限,其中Type,AccessType和Value相同,但我想要抛出异常,但操作是不同的.
因此,例如p1和p2的列表会抛出异常:
Privilege p1 = new Privilege{Type = "a", AccessType = "a", Value = "a", Action = "a"}; Privilege p2 = new Privilege{Type = "a", AccessType = "a", Value = "a", Action = "b"};
我想使用LINQ,但不知道如何.
所以你想允许重复类型访问类型值,但只有当操作也相同时?bool throwException = pList .GroupBy(x => new { x.Type, x.AccessType, x.Value }) .Any(g => g.Select(p => p.Action).Distinct().Count() > 1);
首先,我正在构建这三个属性的组.然后我检查这些组中是否包含多个动作.然后你可以抛出异常.
如果替换,可能会进行小的优化(如果重复列表很大)
Distinct().Count() > 1
同
Distinct().Skip(1).Any()