我发现我几乎在任何时候都在使用 LINQ,而我之前会编写一个循环来填充容器。我使用 LINQ to SQL 作为我的 ORM,并在其他地方使用大量 LINQ。
这是我为 Active Directory 帮助程序类编写的一个小 sn-p,它可以确定特定用户是否是特定组。请注意使用 Any() 方法遍历用户的授权组,直到找到具有匹配 SID 的授权组。比替代方案更简洁的代码。
private bool IsInGroup( GroupPrincipal group, UserPrincipal user )
{
if (group == null || group.Sid == null)
{
return false;
}
return user.GetAuthorizationGroups()
.Any( g => g.Sid != null && g.Sid.CompareTo( group.Sid ) == 0 );
}
替代方案:
private bool IsInGroup( GroupPrincipal group, UserPrincipal user )
{
if (group == null || group.Sid == null)
{
return false;
}
bool inGroup = false;
foreach (var g in user.GetAuthorizationGroups())
{
if ( g => g.Sid != null && g.Sid.CompareTo( group.Sid ) == 0 )
{
inGroup = true;
break;
}
}
return inGroup;
}
或
private bool IsInGroup( GroupPrincipal group, UserPrincipal user )
{
if (group == null || group.Sid == null)
{
return false;
}
foreach (var g in user.GetAuthorizationGroups())
{
if ( g => g.Sid != null && g.Sid.CompareTo( group.Sid ) == 0 )
{
return true;
}
}
return false;
}
这是一个 sn-p,它对存储库进行搜索、订购并将前 10 个匹配的业务对象转换为特定于视图的模型(Distance 是匹配模型的唯一 id 与 uniqueID 的 Levenshtein 编辑距离参数)。
model.Results = this.Repository.FindGuestByUniqueID( uniqueID, withExpired )
.OrderBy( g => g.Distance )
.Take( 10 )
.ToList()
.Select( g => new GuestGridModel( g ) );