MS Graph - LINQ 查询返回不正确的结果
MS Graph - LINQ query returning incorrect results
问题: 以下是返回一个不正确的值。我可能遗漏了什么,如何纠正?该问题似乎纯粹与使用 LINQ
而不是 MS Graph 有关。
备注:虽然这是一个比较简单的案例,只有两种类型的值(Azure AD 和 MS Account),但在实际场景中会不止两种情况。因此,我们不能只对一个简单的情况使用简单的三元运算符(例如 condition ? consequent : alternative
)——相反,它必须嵌入多个情况。如以下 LINQ 查询所示,我将有两种以上的情况。
LINQ:
dgrdUsers
是下面显示的 DataGrid 的名称。
Microsoft.Graph.IGraphServiceUsersCollectionPage users = await graphClient.Users.Request()
.Select("displayName, userPrincipalName, userType")
.GetAsync();
List<User> lstUsers = (List<User>)users.CurrentPage.ToList();
dgrdUsers.ItemsSource = (
from User in lstUsers
select new
{
DisplayName = User.DisplayName,
UserPrincipalName = User.UserPrincipalName,
UserType = User.UserType,
Source =
(
(User.UserType == "Member" && User.UserPrincipalName.Contains("#Ext#") == false) ? "Azure Active Directory" :
(User.UserType == "Member" && User.UserPrincipalName.Contains("#Ext#")) ? "Microsoft Account" :
(User.UserType == "Guest" && User.ExternalUserState == "Accepted") ? "External Azure Active Directory" :
(User.UserType == "Guest" && User.ExternalUserState == "PendingAcceptance") ? "Invited user" : "Unknown"
)
}
).ToList();
Ref:还有类似的LINQ例子如this and this
结果数据网格:
第二行的 Source
列值应为 Microsoft Account
。
如评论中所述:这是由不正确的字母大小写引起的,在代码中使用 #Ext#
但“用户名”是大写的 #EXT#
。
所以只需将代码中的 #Ext#
更改为 #EXT#
。
问题: 以下是返回一个不正确的值。我可能遗漏了什么,如何纠正?该问题似乎纯粹与使用 LINQ
而不是 MS Graph 有关。
备注:虽然这是一个比较简单的案例,只有两种类型的值(Azure AD 和 MS Account),但在实际场景中会不止两种情况。因此,我们不能只对一个简单的情况使用简单的三元运算符(例如 condition ? consequent : alternative
)——相反,它必须嵌入多个情况。如以下 LINQ 查询所示,我将有两种以上的情况。
LINQ:
dgrdUsers
是下面显示的 DataGrid 的名称。
Microsoft.Graph.IGraphServiceUsersCollectionPage users = await graphClient.Users.Request()
.Select("displayName, userPrincipalName, userType")
.GetAsync();
List<User> lstUsers = (List<User>)users.CurrentPage.ToList();
dgrdUsers.ItemsSource = (
from User in lstUsers
select new
{
DisplayName = User.DisplayName,
UserPrincipalName = User.UserPrincipalName,
UserType = User.UserType,
Source =
(
(User.UserType == "Member" && User.UserPrincipalName.Contains("#Ext#") == false) ? "Azure Active Directory" :
(User.UserType == "Member" && User.UserPrincipalName.Contains("#Ext#")) ? "Microsoft Account" :
(User.UserType == "Guest" && User.ExternalUserState == "Accepted") ? "External Azure Active Directory" :
(User.UserType == "Guest" && User.ExternalUserState == "PendingAcceptance") ? "Invited user" : "Unknown"
)
}
).ToList();
Ref:还有类似的LINQ例子如this and this
结果数据网格:
第二行的 Source
列值应为 Microsoft Account
。
如评论中所述:这是由不正确的字母大小写引起的,在代码中使用 #Ext#
但“用户名”是大写的 #EXT#
。
所以只需将代码中的 #Ext#
更改为 #EXT#
。