Использование LINQ для возврата только двух конкретных DataTables в DataSet с несколькими DataTables - PullRequest
0 голосов
/ 05 июня 2018

Как я могу использовать LINQ для возврата только двух конкретных DataTable в DataSet с несколькими DataTables?Например, в приведенном ниже фрагменте кода можно ли добавить LINQ к myDS.Tables в операторе foreach?

Я хочу удалить оператор if, если это возможно.

 DataTable myTable1 = new DataTable("MyTable1");
 DataTable myTable2 = new DataTable("MyTable2");
 DataTable myTable3 = new DataTable("MyTable3");
 DataSet myDS = new DataSet();
 myDS.Tables.Add(myTable1);
 myDS.Tables.Add(myTable2);
 myDS.Tables.Add(myTable3);

 foreach (DataTable table in myDS.Tables)
 {
    if (table.TableName != "MyTable1" && table.TableName != "MyTable2")
    {
        continue;
    }
    Console.WriteLine();
    Console.WriteLine("Table Name = " + table.TableName);
 }

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Вы можете использовать linq, используя Cast функцию IEnumerable, а затем использовать функцию фильтра Where, чтобы получить свой результат.Ваш оператор if должен стать предикатом для функции Where.

  var tables = myDS.Tables.Cast<DataTable>()
                          .Where(t=> t.TableName == "MyTable1" || t.TableName == "MyTable2");
0 голосов
/ 05 июня 2018

вместо блока foreach вы можете использовать:

        myDS.Tables
            .OfType<DataTable>()
            .Where(table => new string[] { "MyTable1" , "MyTable2" }.Contains(table.TableName))
            .ToList().ForEach(table =>
            {

                Console.WriteLine();
                Console.WriteLine("Table Name = " + table.TableName);
            });
...