c# - 什么时候应该使用 LINQ for C#?

标签 c# .net linq

<分区>

我正在学习 C#,我发现 LINQ 非常有趣。然而,令我感到困惑的是,我想不出使用 LINQ 会提供巨大帮助的场景,因为在代码中复制 LINQ 功能真的不那么难。

您有任何个人经验/建议可以分享吗?

谢谢!

最佳答案

我发现我几乎在任何时候都在使用 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;
}

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 个匹配的业务对象转换为 View 特定模型的代码段(Distance 是匹配模型的唯一 ID 的 Levenshtein 编辑距离来自 uniqueID 参数)。

model.Results = this.Repository.FindGuestByUniqueID( uniqueID, withExpired )
                               .OrderBy( g => g.Distance )
                               .Take( 10 )
                               .ToList()
                               .Select( g => new GuestGridModel( g ) );

关于c# - 什么时候应该使用 LINQ for C#?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2186724/

相关文章:

c# - Visual Studio 2012 运行 Windows Phone 问题

c# - 通过将字符串类型的列表设置为字典来创建字典

c# - 合并两个(或更多)PDF

c# - 使用 LINQ ANY 且出现次数 > 1

visual-studio - 在VS2010中格式化LINQ代码

c# - 无法从 Azure 网站访问 Azure DB 服务器

c# - 根据当前上下文显示RibbonTab的内容

c# - 在 C# 中向 EventHandler 添加一些参数

c# - 所有音频频率

c# - 想要在警报框中显示变量的值