如何在不指定完整命名空间的情况下使用 OData(7.4) .Net Core 过滤枚举列表?

Posted

技术标签:

【中文标题】如何在不指定完整命名空间的情况下使用 OData(7.4) .Net Core 过滤枚举列表?【英文标题】:How to filter list of enums with OData(7.4) .Net Core without specifying full namespace? 【发布时间】:2021-09-19 16:59:35 【问题描述】:

我正在尝试使用 Entity Framework Core 在 .Net Core Web Api (3.1) 应用程序中使用 OData(7.4) 过滤枚举列表。例如:

public class User 

    public Guid Id  get; set; 

    public string Name  get; set; 

    public List<Skill> Skills  get; set; 



public enum Skill

    Eating = 1,
    Breathing = 2,
    Walking = 3,
    Drinking =4

我可以通过这种方式过滤指定完整命名空间的用户: 《UserApi.Domain.Models.CommonTypes.EnumTypes.Skill'Eating'中的技能》 但是这样我们收到的 URL 太长了。 是否可以通过这种方式或类似的方式通过枚举过滤用户: “Skill'Eating' in Skills”——没有指定完整的命名空间?

【问题讨论】:

一个枚举可以转换为字符串的整数。 我试过这样的演员表,它们不适用于列表。您能否提供一个示例,也许我尝试了其他方法。 【参考方案1】:

尝试以下:

           List<User> users = new List<User>()  
                new User()  Id = new Guid("11111111-2222-3333-4444-555555555555"), Name = "John", Skills = new List<Skill>()  Skill.Breathing, Skill.Eating,
                 new User()  Id = new Guid("11111111-2222-3333-4444-555555555556"), Name = "Mary", Skills = new List<Skill>()  Skill.Drinking , Skill.Walking,
                 new User()  Id = new Guid("11111111-2222-3333-4444-555555555557"), Name = "Harry", Skills = new List<Skill>()  Skill.Eating, Skill.Drinking,
                 new User()  Id = new Guid("11111111-2222-3333-4444-555555555558"), Name = "Peter", Skills = new List<Skill>()  Skill.Walking , Skill.Breathing                                    
            ;

            var skills = users.Select(x => new  name = x.Name, skills = string.Join(",",x.Skills.Select(y => y.ToString()))).ToList();

【讨论】:

我需要用 Odata 来做 OData 模型应该有一个用户列表。上面的代码可以与任何 List. 一起使用

以上是关于如何在不指定完整命名空间的情况下使用 OData(7.4) .Net Core 过滤枚举列表?的主要内容,如果未能解决你的问题,请参考以下文章

使用ant,在不知道完整路径的情况下重命名目录?

如何在不污染全局命名空间的情况下公开 javascript 对象以进行单元测试

为什么原始数据类型在不包含System命名空间的情况下工作

单声道嵌入,在不知道命名空间的情况下获取 MonoClass*

在不修改 C# XSD 类的情况下向 XML 序列化添加前缀和命名空间

如何在不捕获MissingManifestResourceException的情况下知道是否找不到资源文件