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 に答える