Я ищу совместимую C ++ linq библиотеку VS2010 с точечным синтаксисом C # LINQ. имея в виду что-то вроде: from(...).where(...).orderBy.firstOrDefault();
Я погуглил и нашел это так ответьте на коллекцию библиотек LINQ / беспорядок:
orderBy
orderBy
Другие, которые я нашел, не используя точечную нотацию … кстати pfultz2 / Linq кажется, обеспечивает orderBy и, во-первых, его SQL как синтаксис LINQ и Ограничения сделать что-то, что я не ищу = (
Так есть ли какая-нибудь библиотека LINQ C ++ с открытым исходным кодом с точечной нотацией, orderBy и firstOrDefault?
Ну, я не дам вам ответ, который вы хотите, но все равно это будет ответ 🙂
LINQ предназначен для C # в основном. Я думаю, что ваш вариант использования должен быть для перевода кода C # в C ++, но я думаю, что эффективный способ в C ++ это использовать Boost.Range.
Boost.Range повторно использует стандартную библиотеку c ++ таким образом, чтобы легко выполнять запросы к данным:
operator |
, Они оцениваются лениво, как и в LINQ.std::min, std::max, std::all_of, std::any_of, std::none_of
в адаптированных диапазонах.Пример, который я написал на днях, — как перевернуть слова в строке.
Решение было что-то вроде этого:
using string_range = boost::iterator_range<std::string::const_iterator>;
struct submatch_to_string_range {
using result_type = string_range;
template <class T>
string_range operator()(T const & s) const {
return string_range(s.first, s.second);
}
};
string sentence = "This is a sentence";
auto words_query = sentence |
ba::tokenized(R"((\w+))") |
ba::transformed(submatch_to_string_range{}) |
ba::reversed;vector<string_range> words(words_query.begin(), words_query.end());
for (auto const & w : words)
cout << words << endl;
Я настоятельно рекомендую вам основывать свои запросы на этой библиотеке, поскольку она будет поддерживаться в течение очень долгого времени, и я думаю, что это будет в будущем.
Вы можете сделать тот же стиль запросов.
Было бы хорошо, если бы эта библиотека могла быть расширена такими вещами, как | max
а также | to_vector
чтобы не называть вектор напрямую и не копировать, но я думаю, что сейчас, как язык запросов, это более чем приемлемо.
Других решений пока нет …