4
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();

我想检查数据集“oDsEnum”的列“ENUM_ID”是否包含枚举器“Test”的值,以便使用 LINQ 进行进一步操作

4

2 回答 2

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;
于 2012-12-26T12:28:02.733 回答
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;
于 2012-12-26T12:29:07.040 回答