Вместо того, чтобы делать индекс на основе функции (если это даже возможно в mysql) делают Ваш, где пункт делает сравнение диапазона. Что-то как:
, Где TranDateTime> '17.08.2008 0:00:00' и TranDateTime < '17.08.2008 11:59:59')
Это позволяет DB использовать индекс на TranDateTime (существует один, правильно?), чтобы сделать выбор.
Независимо от того, как вы это одеваете, вам, по сути, придется выполнить foreach
над значениями в Словаре
. Dictionary
обеспечивает доступ, близкий к O (1), для полного ключа данного значения. Он не предназначен для обеспечения эффективного доступа к частичному ключу. Для этого вам нужно будет сохранить второй экземпляр Dictionary
, выполняющий соответствующее отображение.
Кратчайший способ найти значение, соответствующее некоторым критериям (я не совсем понял, что конкретно вам нужно - сначала F1
- параметр общего типа, а затем вы используете ==
, чтобы сравнить его, как если бы это было значение ...):
dictionary.Values.First(x => ...);
где ...
будет логическим выражением на x
. Однако это не будет быстрее, чем foreach
... потому что вы не выполняете поиск по ключу словаря. Быстрый только поиск ключа; для чего-то еще вы должны выполнить линейное сканирование (или поддерживать второй словарь для другого ключа, который будет соответствовать тому, что вы ищите). [скопировано из комментария]
Словарь не поддерживает какой-либо конкретный порядок между элементами, поэтому на самом деле нет никакого элемента, который мог бы быть первым, если вы не укажете какой-либо порядок.
Вы можете получить первый элемент, который словарь находит следующим образом:
MyTableClass one = dict.Where(pair => pair.Value.F1 == MyEnum.value).First();
Он будет просто перебирать элементы, пока не найдет совпадение, поэтому вы просто используете словарь как список. Если вам нужна производительность, у вас должен быть словарь, в котором значение из F1 является ключевым.