У нас есть программа, которая использует Linq-To-Sql и выполняет много подобных запросов в наших таблицах.В частности, у нас есть столбец отметки времени, и мы извлекаем самую последнюю отметку времени, чтобы увидеть, изменилась ли таблица со времени нашего последнего запроса.
System.Data.Linq.Binary ts;
ts = context.Documents
.Select(r => r.m_Timestamp)
.OrderByDescending(r => r)
.FirstOrDefault();
Мы часто повторяем этот запрос для разных таблиц, которые актуальны для текущей формы / запроса.Что я хотел бы сделать, это создать «функцию» или что-то, что может повторить последние 3 строки этого запроса (и в идеале будет работать на каждой таблице).Вот что я хотел бы написать:
System.Data.Linq.Binary ts;
ts = context.Documents
.GetMostRecentTimestamp();
Но я понятия не имею, как создать этот «GetMostRecentTimestamp».Кроме того, эти запросы никогда не бывают такими простыми.Они обычно фильтруются по клиенту или по текущему заказу, поэтому более правильный запрос может быть
ts = context.Documents
.Where(r => r.CustomerID == ThisCustomerID)
.GetMostRecentTiemstamp();
Любая помощь?Спасибо!
Обновление [Решение]
Я выбрал ответ Bala R, вот код обновлен, поэтому он компилируется:
public static System.Data.Linq.Binary GetMostRecentTimestamp(this IQueryable<Data.Document> docs)
{
return docs
.Select(r => r.m_Timestamp)
.OrderByDescending(r => r)
.FirstOrDefault();
}
Единственный недостаток этого решенияв том, что мне придется написать эту функцию для каждой таблицы.Мне бы понравился ответ Тейса, если бы он действительно работал, но я не перепроектирую свою базу данных для него.Плюс DateTime не очень хороший способ делать отметки времени.
Обновление № 2 (не так быстро)
Хотя я могу сделать запрос, такой как Documents.Where (...) .GetMostRecentTimestamp (), это решение не работает, если я пытаюсь выполнить запрос на основе ассоциации, такой как MyCustomer.Orders.GetMostRecentTimestamp () или MyCustomer.Orders.AsQueryable (). GetMostRecentTimestamp ();