使用C# Graph API SDK筛选特定扩展属性用户遇阻求替代方案
解决C# Graph API SDK筛选含非空扩展属性用户的问题
原代码中直接使用extension_{appID}_{attribute} ne null的Filter语句不被Graph API支持,核心原因是服务端对扩展属性的null判断存在语法限制。以下是几种可行的替代方案:
针对字符串类型扩展属性的服务端过滤
如果你的扩展属性是字符串类型,可以将过滤条件改为判断属性不等于空字符串,以此筛选出属性存在且值不为空的用户:graphServiceClient.Users.Request() .Filter("extension_{appID}_{attribute} ne ''") .GetAsync();客户端二次过滤
若服务端过滤无法满足需求,可先拉取用户数据(建议通过$select指定仅需字段提升效率),再在客户端筛选出包含目标扩展属性且值不为空的用户:var allUsers = await graphServiceClient.Users.Request() .Select("id,displayName,extension_{appID}_{attribute}") .GetAsync(); var filteredUsers = allUsers.Where(u => u.AdditionalData.TryGetValue("extension_{appID}_{attribute}", out var value) && value != null && !string.IsNullOrWhiteSpace(value.ToString())).ToList();Azure AD Premium许可下的高级过滤
如果你拥有Azure AD Premium许可,可以使用has()函数先判断扩展属性是否存在,再结合非空判断:graphServiceClient.Users.Request() .Filter("has(extension_{appID}_{attribute}) and extension_{appID}_{attribute} ne null") .GetAsync();
内容的提问来源于stack exchange,提问作者Xiong Xu
相关产品推荐
相关产品推荐

