比较枚举列表中的 int 值

问题描述 投票:0回答:1

有这个枚举:

public enum MyEnums
{
    A = 1,
    B = 2,
    C = 3,
    D = 4,
    E = 5
}

如果我创建一个包含 MyEnums 中的一些枚举值的列表,例如:

IEnumerable<MyEnums> myEnums = new(){ MyEnums.A, MyEnums.B, MyEnums.C };

如何检查 int 值是否在此列表中?

query.Where(x => myEnums.Contains((int)x.MyValue));

问题是“x.MyValue”的名称与“MyEnums”中的名称不同,只有 int 值相同。

c# enums entity-framework-core linq-to-entities contains
1个回答
0
投票

如果值集合具有一个

int
值的属性,那么您可以使用以下事实:
enum
实际上是底层的
int
。目前尚不清楚您到底想要什么,所以这里有一些可能性(我创建了一个简单对象的集合来显示):

  1. 您想要获取由
    int
    定义的
    enum
    值的集合:
public enum MyEnum {A = 1, B = 2, C = 3, D = 4, E = 5}

public class ExampleType {
    public int MyValue { get; set;} 
}

public static void Main()
{
    IEnumerable<MyEnum> myEnums = new List<MyEnum>(){ MyEnum.A, MyEnum.B, MyEnum.C };
    IEnumerable<ExampleType> query = new List<ExampleType>(){ new ExampleType(){MyValue = 1}, new ExampleType(){MyValue = 2}, new ExampleType(){MyValue = 9}};
    var results = query.Where(x => Enum.IsDefined(typeof(MyEnum), x.MyValue)).Select(x => x.MyValue);
    foreach (var r in results) {
        Console.WriteLine(r);   
    }
}

结果是 {1, 2}

  1. 您想要获取由恰好位于
    enum
    值集合中的
    enum
    定义的
    int
    值的集合:
public enum MyEnum {A = 1, B = 2, C = 3, D = 4, E = 5}

public class ExampleType {
    public int MyValue { get; set;} 
}

public static void Main()
{
    IEnumerable<MyEnum> myEnums = new List<MyEnum>(){ MyEnum.A, MyEnum.B, MyEnum.C };
    IEnumerable<ExampleType> query = new List<ExampleType>(){ new ExampleType(){MyValue = 1}, new ExampleType(){MyValue = 2}, new ExampleType(){MyValue = 9}};
    var results = query.Where(x => Enum.IsDefined(typeof(MyEnum), x.MyValue)).Select(x => (MyEnum)x.MyValue);
    foreach (var r in results) {
        Console.WriteLine(r);   
    }
}

结果是{A, B}

  1. 您想要获取
    ExampleType
    对象的集合,这些对象具有由
    int
    定义的属性的
    enum
    值:
public enum MyEnum {A = 1, B = 2, C = 3, D = 4, E = 5}

public class ExampleType {
    public int MyValue { get; set;} 
    
    public override string ToString() {
        return this.MyValue.ToString();
    }
}

public static void Main()
{
    IEnumerable<MyEnum> myEnums = new List<MyEnum>(){ MyEnum.A, MyEnum.B, MyEnum.C };
    IEnumerable<ExampleType> query = new List<ExampleType>(){ new ExampleType(){MyValue = 1}, new ExampleType(){MyValue = 2}, new ExampleType(){MyValue = 9}};
    var results = query.Where(x => Enum.IsDefined(typeof(MyEnum), x.MyValue));
    foreach (var r in results) {
        Console.WriteLine(r);   
    }
}

结果是两个

ExampleType
对象,它们具有
MyValue
属性值,这些属性值是由
MyEnum
定义的有效值。

© www.soinside.com 2019 - 2024. All rights reserved.