在LINQ中基于List过滤枚举

时间:2012-10-04 08:41:19

标签: linq enums

我有一个Enum

public enum ProcessStatus: byte
{
    NotStarted = 0,
    PreCheckStarted= 1,
    PreCheckCompleted= 2,
    Processing= 3,
    Failed= 4,
    Completed= 5,
    Closed= 6
}
表中的

我们有0,3,5,6

之类的条目

我们需要基于某些标准的Enums列表,标准是List,其中包含0,1,2

我能够将所有枚举作为列表赞成

 Enum.GetValues(typeof(ProcessStatus)).OfType<ProcessStatus>()

并且

List<byte> processListIDs 

包含ID

我想要

 IEnumerable<ProcessStatus> filtered based on ids in processListIDs using LINQ.

先谢谢

4 个答案:

答案 0 :(得分:2)

您可以Intersect使用更好的效果:

  var enumList = Enum.GetValues(typeof (ProcessStatus))
                     .OfType<ProcessStatus>().Cast<byte>();

  var result = enumList.Intersect(processListIDs)
                       .Cast<ProcessStatus>();

答案 1 :(得分:1)

var res =
    processStatusCollection.Where(item => processListIDs.Contains((int)item));

答案 2 :(得分:0)

您可以使用Enum.TryParse<TEnum>

List<byte> processListIDs = new List<byte>() { 0, 3, 5, 6 };
ProcessStatus ps = ProcessStatus.NotStarted;
IEnumerable<ProcessStatus> status = processListIDs
    .Where(p => Enum.TryParse<ProcessStatus>(p.ToString(), out ps))
    .Select(p => ps);

答案 3 :(得分:0)

试试这个,

var p = new List<byte>() { 1, 2, 3, 4, 6 };
IEnumerable<ProcessStatus> result = p.Select(o => (ProcessStatus)Enum.Parse(typeof(ProcessStatus), o.ToString()));

/// do something with result