Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# linq查询中的开关盒_C#_Linq - Fatal编程技术网

C# linq查询中的开关盒

C# linq查询中的开关盒,c#,linq,C#,Linq,如何使用可能的空处理在相应linq中转换以下foreach语句: foreach (var val in userData.ManagedUsers.Values) { if (val.UserId == userId) { foreach (var role in val.Roles) { switch (role.ToLowe

如何使用可能的空处理在相应linq中转换以下foreach语句:

foreach (var val in userData.ManagedUsers.Values)
        {
            if (val.UserId == userId)
            {
                foreach (var role in val.Roles)
                {
                    switch (role.ToLower())
                    {
                        case "underwriter1":
                            return "1";
                        case "underwriter2":
                            return "2";
                        case "underwriter3":
                            return "3";
                    }
                }
            }
        }
你可以用这个:

string result = userData.ManagedUsers.Values
    .Where(u => u.UserId == userId)
    .SelectMany(u => u.Roles)
    .Select(r => {
        if(String.Equals(r, "underwriter1", StringComparison.InvariantCultureIgnoreCase))
            return "1";
        else if(String.Equals(r, "underwriter2", StringComparison.InvariantCultureIgnoreCase))
            return "2";
        else if(String.Equals(r, "underwriter3", StringComparison.InvariantCultureIgnoreCase))
            return "3";
        else return null; 
    }).First(r => r != null);
我在这里不使用
开关
,因为您需要使用
ToLower
来不敏感地比较大小写。那你就不能通过考试了。因此,我将
String.Equals
invariantCultureInogoreCase
一起使用,这也更有效,可以处理
Role
null
的情况

顺便说一句,如果我正确理解你的逻辑,这似乎更好:

 string result = userData.ManagedUsers.Values
     .Where(u => u.UserId == userId)
     .SelectMany(u => u.Roles)
     .Select(r => r != null && r.StartsWith("underwriter") ? r.Substring("underwriter".Length) : null)
     .First();

你试过这个吗?(有没有人投了赞成票,或者OP接受了?)@Rawling:没有类或样本数据,很难进行测试。用
新字符串[0]
测试“有趣”的步骤并不难@Rawling:你说得对,我已经测试过了。lambda表达式需要返回没有
else
的情况下不存在的内容。我已经解决了一个例外。我还添加了另一个更简洁的方法。除此之外,你只检查第一个角色。没有理由否决投票。这是一个合法的问题