По сути, этот список огромен ... это все, что находится за пределами относительно небольшого набора вещей, с которыми обрабатываются . К сожалению, Law of Leaky Abstractions начинает действовать, и у каждого поставщика есть разные ответы ...
LINQ-to-Objects сделает все (в значительной степени), так как это делегаты; LINQ-to-SQL и Entity Framework имеют различных наборов поддержки.
В целом, я добился значительных успехов, используя свойства DateTime
и т. Д., Но в действительности вам нужно будет убедиться, что ваши выражения запроса покрыты модульными тестами, так что если вы когда-либо смени провайдеров (или провайдер обновится) ты знаешь, что все еще работает.
Полагаю, одно из представлений - думать с точки зрения TSQL; нет BOTTOM n
, но есть TOP 1
(re * OrderByDescending
); В терминах string.IsNullOrEmpty
вы можете быть буквально: foo.Bar == null || foo.Bar == ""
; и с DateTime.Date
вы, вероятно, можете сделать совсем немного с DATEPART
/ различными компонентами.
Другой вариант с LINQ-to-SQL - это инкапсуляция логики в UDF, чтобы вы могли написать UDF, который принимает datetime
и возвращает datetime
, и выставлять это через dbml в контексте данных , Затем вы можете использовать это в своих запросах:
where ctx.Date(foo.SomeDate) == DateTime.Today
Однако этот подход не обязательно хорошо использует индексы.
Обновление:
- Поддерживаемые переводы методов и т. Д. здесь .
- Поддерживаемые операции запроса и т. Д. здесь .
Для получения полной информации, вы можете посмотреть на System.Data.Linq.SqlClient.PostBindDotNetConverter+Visitor
в отражателе - в частности, Translate...
методы; некоторые функции string
обрабатываются отдельно. Так что не огромный выбор - но это деталь реализации.