C#-如何使用枚举筛选列表

C#-如何使用枚举筛选列表,c#,entity-framework,asp.net-core,entity-framework-core,C#,Entity Framework,Asp.net Core,Entity Framework Core,我有两门a课: public enum ArticleType { News = 1; SpecialOffer = 2; Service = 3; } public ArticleApiDto { public int Id; public ArticleType Type; } 现在我有了从db获取数据的方法,类似于: public List<ArticleApiDto> GetAll(List<ArticleType> types) {

我有两门a课:

public enum ArticleType
{
  News = 1;
  SpecialOffer = 2;
  Service = 3;
}

public ArticleApiDto
{
  public int Id;
  public ArticleType Type;
}
现在我有了从db获取数据的方法,类似于:

public List<ArticleApiDto> GetAll(List<ArticleType> types)
{
  var res = new List<ArticleApiDto>();
  res = context.articles.ToList();
  //do stuff
}
public List GetAll(列表类型)
{
var res=新列表();
res=context.articles.ToList();
//做事
}
现在我想从res中筛选出typetypes方法参数中指定的文章


问题1:我实际上无法使用Contains,因为ArticleType是enum

问题2:
列表
是因为有时我只想传递一种类型,但有时我想传递两种或三种类型。目前我想不出更好的解决办法


有人能帮我一下吗?我正在搜索一个完整的noone,但不知道要通过多个类型,您可以这样做:

将枚举设为标志(请注意,现在的值不能为1,2,3,4,应为1,2,4,8,16,…:

[Flags]
public enum ArticleType
{
  News = 1;
  SpecialOffer = 2;
  Service = 4;
}
现在,您可以添加要使用
|
进行过滤的内容:

filter = ArtickeType.News | ArticleType.Service;
var result = res.Where(x => filter & x.Type != 0).ToList();
或:

要使用当前枚举执行此操作,请执行以下操作:

public enum ArticleType
{
  News = 1;
  SpecialOffer = 2;
  Service = 3;
}

var filter = new List<ArticleType> { ArticleType.Service, ArticleType.News};
var result = res.Where(x => filter.Contains(x.Type)).ToList();
公共枚举ArticleType
{
新闻=1;
专用过滤器=2;
服务=3;
}
var filter=新列表{ArticleType.Service,ArticleType.News};
var result=res.Where(x=>filter.Contains(x.Type)).ToList();

此代码与我一起工作,我使用Linq with contains,它可能会解决您的问题

公共静态列表GetAll(列表类型)
{
var res=新列表();
列表文章=新列表
{
新的ArticleApiDto{Id=1,Type=ArticleType.News},
新的ArticleApiDto{Id=2,Type=ArticleType.SpecialOffer},
};
var newArticales=文章。其中(i=>
{
返回类型。包含(i.Type);
}).ToList();
返回新文章;

}
Try.Where(item=>types.Contains(item.Type)),或者如果这在linq2sql中不起作用,您可以将类型列表转换为int列表,并检查int列表是否包含项目类型(我猜它在db中是int)。“我实际上无法使用Contains,因为ArticleType是enum”。您试过了吗?出现了什么错误?因为您应该能够做到。不要忘记ToList
。其中(item=>types.Contains(item.Type))。ToList()
您应该能够使用Enum.Equals进行比较。例如:
。其中(item=>types.Any(t=>item.Type.Equals(t))。ToList()
谢谢大家。我已经测试了你们所有的建议,每个建议都有效。再次感谢你们,祝你们度过愉快的一天!
public enum ArticleType
{
  News = 1;
  SpecialOffer = 2;
  Service = 3;
}

var filter = new List<ArticleType> { ArticleType.Service, ArticleType.News};
var result = res.Where(x => filter.Contains(x.Type)).ToList();