如何在不指定完整命名空间的情况下使用 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 过滤枚举列表?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不污染全局命名空间的情况下公开 javascript 对象以进行单元测试
单声道嵌入,在不知道命名空间的情况下获取 MonoClass*