public enum Test
{
A = 0,
B = 1,
C = 2,
D = 3,
E = 4,
F = 5,
G = 6
}
DataSet oDsEnum = new DataSet();
DataTable oDtEnum = new DataTable();
oDtEnum.Columns.Add(new DataColumn("ENUM_ID", typeof(int)));
oDtEnum.Columns.Add(new DataColumn("ENUM_VALUE", typeof(int)));
oDtEnum.Rows.Add(10, 1001);
oDtEnum.Rows.Add(21, 1002);
oDtEnum.Rows.Add(2, 1003);
oDtEnum.Rows.Add(300, 1004);
oDtEnum.Rows.Add(4, 1005);
oDsEnum.Tables.Add(oDtEnum);
oDsEnum.AcceptChanges();
我想检查DataSet“oDsEnum”的列“ENUM_ID”是否包含枚举器“Test”的值,以便使用LINQ进一步操作
答案 0 :(得分:3)
var enumValues = (
from int val in Enum.GetValues(typeof(Test))
select val
).ToArray();
如果您只想知道是否有任何此类值,请使用Any
:
var query = oDtEnum.AsEnumerable().Any(
row => enumValues.Contains(row.Field<int>("ENUM_ID"))
);
如果你自己需要这些值:
var query =
from row in oDtEnum.AsEnumerable()
where enumValues.Contains(row.Field<int>("ENUM_ID"))
select row;
答案 1 :(得分:2)
这将检查列是否包含来自枚举的值:
oDsEnum.AsEnumerable()
.Any(row => Enum.IsDefined(typeof(Test), row.Field<int>("ENUM_ID")));
如果您想选择ENUM_ID
字段中枚举值的行,请使用Where
代替Any
。
更新单一查询(我认为最佳性能):
var query = from row in oDtEnum.AsEnumerable()
join t in Enum.GetValues(typeof (Test)).Cast<Test>()
on row.Field<Test>("ENUM_ID") equals t
select row;