Загрузки все магазины или конкретно магазин из DataTable


public  delegate DataTable loadDataTable();

DataTable shops = (cmbShop.Text == "All Shops") ? 
      new loadDataTable(() =>
       {
       Program.con.GET_Table_From_DataBase("sh", "select * from shops ");
       return Program.con.dst.Tables["sh"];
       }
      ).Invoke()
     :
       new loadDataTable(() =>
       {
        Program.con.GET_Table_From_DataBase("sh", "select * from shops where shopname='" +  cmbShop.Text + "' ");
        return Program.con.dst.Tables["sh"];
       }
  ).Invoke();

Я просто устанавливая значение объекта DataTable магазинов здесь.

Я учусь о лямбда-выражениях, так только для целей обучения, я хочу знать, если этот код может быть сокращен при использовании лямбда-выражений.



1236
3
задан 14 июня 2011 в 10:06 Источник Поделиться
Комментарии
2 ответа

Вам не нужны лямбда-выражения вообще.

Вы можете написать

if (cmbShop.Text == "All Shops")
Program.con.GET_Table_From_DataBase("sh", "select * from shops ");
else
Program.con.GET_Table_From_DataBase("sh", "select * from shops where shopname='" + cmbShop.Text + "' ");

DataTable shops = Program.con.dst.Tables["sh"];

11
ответ дан 14 июня 2011 в 01:06 Источник Поделиться

Используя лямбда-выражения немного перебор.

Хотя я думаю, что это идет за борт (имхо) на тернарного оператора:

 Program.con.GET_Table_FromDataBase("sh", string.Format("select * from shops{0}", 
(cmbShop.Text == "All Shops") ? string.Empty : string.Format(" where shopname='"+cmbShop.Text+"'"));

Как другие сообщили, я бы пересмотреть, как вы идете ваши данные. Нынешний способ может оставить вас открытыми для мира боли. :) Изменив свой подход на доступ к данным, более чем вероятно, также изменить то, как вы строите ваши запросы, так что большое это будет спорный.

1
ответ дан 17 июня 2011 в 10:06 Источник Поделиться