我有一个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.
先谢谢
答案 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