Методы расширения - это в основном просто статические методы, поэтому я не знаю, как их переопределить, но если вы просто поместите их в другое пространство имен, вы можете позвонить вместо них, вместо того, который хотите заменить.
Но Мэтт Манела рассказывает о том, как методы экземпляра имеют приоритет над методами расширения: http://social.msdn.microsoft.com/forums/en-US/csharplanguage/thread/e42f1511-39e7-4fed-9e56- 0cc19c00d33d
Для получения дополнительных идей о методах расширения вы можете посмотреть http://gen5.info/q/2008/07/03/extension-methods-nulls-namespaces-and -precedence-in-c /
Редактирование: я забыл о проблеме двусмысленности, поэтому лучше всего попытаться не включать методы расширения, которые вы хотите заменить. Таким образом, вам может понадобиться не использовать директиву «using», а просто поместить в полное имя пакета некоторые классы, и это может решить проблему.
Я не знаю, планируете ли вы, чтобы столбец occurrence
появлялся в результирующем наборе. Предполагая, что вы этого не сделаете, вам просто нужно предложение ORDER BY
. Предполагая, что вы делаете , нам нужно больше работать. Один простой подход - использовать коррелированный подзапрос, чтобы найти номер события:
SELECT
idlogin_details,
emp_id,
date,
(SELECT COUNT(*) FROM login_details t2
WHERE t1.emp_id = t2.emp_id AND t2.date <= t1.date) occurrence
FROM login_details t1
ORDER BY
emp_id, date;