0

我有一个枚举

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

在表中,我们有类似 0,3,5,6 的条目

我们需要基于某些标准的枚举列表,标准是包含 0,1,2 的列表

我能够将所有枚举作为 List Like

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

并且有

List<byte> processListIDs 

其中包含 ID

我想要

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

提前致谢

4

4 回答 4

2

您可以使用Intersect更好的性能:

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

  var result = enumList.Intersect(processListIDs)
                       .Cast<ProcessStatus>();
于 2012-10-04T08:57:15.107 回答
1
var res =
    processStatusCollection.Where(item => processListIDs.Contains((int)item));
于 2012-10-04T08:49:02.623 回答
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);
于 2012-10-04T09:04:04.307 回答
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
于 2012-10-04T09:07:53.660 回答