我发现我以前编写循环来填充容器时几乎每次都会使用 LINQ。我使用 LINQ to SQL 作为我的 ORM,并在其他地方使用很多 LINQ。
下面是我为 Active Directory 帮助程序类编写的一个小片段,用于查找特定用户是否属于特定组。请注意使用 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;
}
or
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;
}
下面是一个代码片段,它对存储库进行搜索、排序,并将前 10 个匹配的业务对象转换为特定于视图的模型(Distance
是匹配模型的唯一 id 与 uniqueID 参数的 Levenshtein 编辑距离)。
model.Results = this.Repository.FindGuestByUniqueID( uniqueID, withExpired )
.OrderBy( g => g.Distance )
.Take( 10 )
.ToList()
.Select( g => new GuestGridModel( g ) );