gpt4 book ai didi

c# - 在 linq 查询中切换大小写

转载 作者:行者123 更新时间:2023-12-02 00:24:27 25 4
gpt4 key购买 nike

如何在相应的 linq 中转换以下 foreach 语句并可能进行 null 处理:

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);

这里我没有使用switch,因为您需要使用ToLower来进行不区分大小写的比较。您没有通过turkey test然后。因此,我将 String.EqualsInvariantCultureIgnoreCase 一起使用,这也更有效,并且可以处理 Rolenull 的情况>.

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

 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();

关于c# - 在 linq 查询中切换大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28166032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com