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」に、LINQを使用してさらに操作するための列挙子「Test」の値が含まれているかどうかを確認したい

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