7

我使用 C# LINQ dot sintax 搜索 VS2010 兼容的 C++ linq 库。意思是:from(...).where(...).orderBy.firstOrDefault();

我用谷歌搜索并找到了这个,所以回答 LINQ 库集合/混乱

我发现其他人没有使用点表示法.. btw pfultz2/Linq似乎提供了 orderBy 并且首先它的 SQL 像 LINQ sintax 和限制使它成为我不想要的东西=(

那么是否有任何带有点表示法、orderBy 和 firstOrDefault 的开源 C++ LINQ 库?

4

1 回答 1

1

好吧,我不会给你你想要的答复,但无论如何都会是答复:-)

LINQ 主要用于 C#。我认为您的用例应该是将 C# 代码翻译成 C++,但我认为 C++ 中的有效方法是使用Boost.Range

Boost.Range 以一种易于查询数据的方式重用 c++ 标准库:

  1. 您可以将适配器用于具有从左到右表示法的容器,使用operator |. 就像在 LINQ 中一样,它们是惰性求值的。
  2. 您可以执行诸如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,但我认为作为一种查询语言,现在,它是完全可以接受的。

于 2013-11-18T05:53:38.727 回答