Пара вопросов по LINQ
От: Аноним  
Дата: 14.09.09 11:11
Оценка:
Добрый день.
Вопрос №1
Есть панель, на которой находится несколько FlowLayoutPanel,а в ней в свою очередь контролы.
Мне надо среди этих контролов найти, например ComboBox у которого в Tag определенная строка.
Сейчас делаю так
            foreach (FlowLayoutPanel panel in this.MainPanel.Controls.OfType<FlowLayoutPanel>())
            {
                var combo = panel.Controls.OfType<ComboBox>().FirstOrDefault(i => i.Tag.ToString().Equals(param));
                if (combo != null)
                    return combo;
            }

Можно ли избавится от цикла??

Вопрос №2
Есть DataTable с полями ID И Name.
Нужно выбрать индекс DataRow в которой, указанный Name
Сейчас так
                DataRow row = dataTable.Rows.OfType<DataRow>().
                             FirstOrDefault(i=>i[1].ToString().Equals(value));
               dataTable.Rows.IndexOf(row); <-------------можно ли избавится от этого??

И можно выбрать непосредственно DataGridViewComboBoxCell которое соотвествует указанному условию??
Спасибо!
Re: Пара вопросов по LINQ
От: Пельмешко Россия blog
Дата: 14.09.09 12:42
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вопрос №1

А>Можно ли избавится от цикла??

Как-то так:
this.MainPanel.Controls.OfType<FlowLayoutPanel>()
  .SelectMany     (panel => panel.Controls.OfType<ComboBox>())
  .FirstOrDefault (combo => combo.Tag.ToString() == param);
Re: Пара вопросов по LINQ
От: server_mouse Беларусь about:blank
Дата: 15.09.09 15:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день.

А>Вопрос №1
А>Есть панель, на которой находится несколько FlowLayoutPanel,а в ней в свою очередь контролы.
А>Мне надо среди этих контролов найти, например ComboBox у которого в Tag определенная строка.
А>Сейчас делаю так
А>
А>            foreach (FlowLayoutPanel panel in this.MainPanel.Controls.OfType<FlowLayoutPanel>())
А>            {
А>                var combo = panel.Controls.OfType<ComboBox>().FirstOrDefault(i => i.Tag.ToString().Equals(param));
А>                if (combo != null)
А>                    return combo;
А>            }
А>

А>Можно ли избавится от цикла??

var res=(from p in this.MainPanel.Controls.OfType<FlowLayoutPanel>()
         from c in p.Controls.OfType<ComboBox>()
         where c.Tag.ToString().Equals(param)).FirstOrDefault();
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Re[2]: Пара вопросов по LINQ
От: akasoft Россия  
Дата: 16.09.09 06:32
Оценка: :)
Здравствуйте, Пельмешко, Вы писали:

П>Как-то так:

П>
П>this.MainPanel.Controls.OfType<FlowLayoutPanel>()
П>  .SelectMany     (panel => panel.Controls.OfType<ComboBox>())
П>  .FirstOrDefault (combo => combo.Tag.ToString() == param);
П>


И что, такая запись не приведёт "внутри" к созданию цикла для получения элемента?
... << RSDN@Home 1.2.0 alpha 4 rev. 1238>> SQL Express 2005
Re[3]: Пара вопросов по LINQ
От: Sinclair Россия https://github.com/evilguest/
Дата: 16.09.09 06:55
Оценка:
Здравствуйте, akasoft, Вы писали:
A>И что, такая запись не приведёт "внутри" к созданию цикла для получения элемента?
Гм. А что, не очевидно, что "внутри" цикл будет всегда — тупо из-за отсутствия других конструкций на нижнем уровне?
Или есть какая-то иллюзия по поводу "магии", которая бы позволила делать обработку списков переменной длины без циклов?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Пара вопросов по LINQ
От: Ziaw Россия  
Дата: 16.09.09 07:14
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, akasoft, Вы писали:

A>>И что, такая запись не приведёт "внутри" к созданию цикла для получения элемента?
S>Гм. А что, не очевидно, что "внутри" цикл будет всегда — тупо из-за отсутствия других конструкций на нижнем уровне?
S>Или есть какая-то иллюзия по поводу "магии", которая бы позволила делать обработку списков переменной длины без циклов?

Есть вероятность, что человека попросили переписать код на review. А он не может понять зачем: "внутри же все равно будет цикл".
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Re[4]: Пара вопросов по LINQ
От: akasoft Россия  
Дата: 16.09.09 07:47
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Гм. А что, не очевидно, что "внутри" цикл будет всегда — тупо из-за отсутствия других конструкций на нижнем уровне?

S>Или есть какая-то иллюзия по поводу "магии", которая бы позволила делать обработку списков переменной длины без циклов?

Мне-то это очевидно. Другое дело, что я могу ошибаться либо устареть. Мало ли чего там с этим синтаксисом напридумывали, и вдруг там не только "сахар".

Мне известна только одна магия по избавлению от цикла — завести отдельную переменную и хранить ссылку, пока она нужна.
... << RSDN@Home 1.2.0 alpha 4 rev. 1233>> SQLE 2005
Re[5]: Пара вопросов по LINQ
От: Sinclair Россия https://github.com/evilguest/
Дата: 16.09.09 08:33
Оценка:
Здравствуйте, akasoft, Вы писали:
A>Мне известна только одна магия по избавлению от цикла — завести отдельную переменную и хранить ссылку, пока она нужна.
Не понял идеи. Нет, в смысле, можно конечно построить хешмэп, который отображает string в Combobox по свойству Tag. Тогда, если нужно часто искать комбобокс по значению тега, всё существенно ускорится. Но как тут можно обойтись одной ссылкой, я не допираю.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Пара вопросов по LINQ
От: akasoft Россия  
Дата: 16.09.09 08:44
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Не понял идеи. Нет, в смысле, можно конечно построить хешмэп, который отображает string в Combobox по свойству Tag. Тогда, если нужно часто искать комбобокс по значению тега, всё существенно ускорится. Но как тут можно обойтись одной ссылкой, я не допираю.


Возможно, я неверно понял описанную задачу. Понял так, что Tag используется, чтобы пометить нужный элемент управления, чтобы потом к нему обращаться. И Tag не меняется. Так зачем перебирать список каждый раз, ведь достаточно перебрать один раз либо при создании элемента занести ссылку на него в отдельное поле/переменную, и обращаться к ней.

Если меченый меняется, то можно завести отдельный метод для смены, где корректировать поле-ссылку. Если меченых несколько — занести их массив-список.
... << RSDN@Home 1.2.0 alpha 4 rev. 1233>> SQLE 2005
Re[7]: Пара вопросов по LINQ
От: Пельмешко Россия blog
Дата: 16.09.09 15:12
Оценка:
Здравствуйте, akasoft, Вы писали:

A>Возможно, я неверно понял описанную задачу. Понял так, что Tag используется, чтобы пометить нужный элемент управления, чтобы потом к нему обращаться. И Tag не меняется. Так зачем перебирать список каждый раз, ведь достаточно перебрать один раз либо при создании элемента занести ссылку на него в отдельное поле/переменную, и обращаться к ней.


Меняется Tag или нет не было сказано, так же как и не было сказано, что понадобится лишь один контрол с определённым Tag.
Я думаю топикстартер всего лишь хотел избавится от императивной конструкции для поиска, о том что дальше он делать будет речи вообще не шло.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.