Я хотел бы видеть возможность для функции включать произвольное количество параметров ссылки и передавать их через вызов вложенной функции. В .net это можно сделать для любого фиксированного числа универсальных параметров, используя что-то вроде (показана версия с двумя дополнительными параметрами):
// I forget the C# syntax for delegates, since I normally code in vb delegate void RefAction<T1, T2, T3>(ref T1 p1, ref T2 t2, ref T3 p3); Point myPoints[]; void DoSomethingWithIndexedPoint<XT1, XT2>(int index, RefAction<Point, XT1, XT2) theAction, ref XT1 xp1, ref XT2 xp2) { theAction(myPoints[index], xp1, xp2); }
Мой предпочтительный синтаксис будет выглядеть примерно так:
delegate void RefAction<T1, T2, T3>(ref T1 p1, ref T2 t2, ref T3 p3); Point myPoints[]; void DoSomethingWithIndexedPoint<ref ...>(int index, RefAction<Point, ref ...>, ref ...) theAction, ref XT1 xp1, ref XT2 xp2) { theAction(myPoints[index], ...); }
где "..." будет автоматически расширяться компилятором любым подходящим способом. Такая возможность позволила бы использовать Lambdas во многих ситуациях без необходимости генерировать экземпляры замыкания, а также позволяла бы делать код наподобие:
Interlocked.CompareExchange(SomeObject["George"], SomeValue, SomeOtherValue);
, который компилятор мог бы переписать как нечто похожее на:
SomeObject.ActUponProperty("George", (ref dest, ref p1, ref p2) => {Interlocked.CompareExchange(dest, p1, p2);}, SomeValue, SomeOtherValue);
Обратите внимание, что поскольку лямбда-выражение не будет использовать никаких элементов или переменных экземпляра, кроме тех, которые передаются в качестве параметров ref, оно может быть реализовано как статическая функция и не должно создавать замыкание.
Я главный автор драйвера .Net для Mongo. В настоящее время для него еще нет ORM-подобного картографа. Вместо этого он работает с простыми документами, которые являются эквивалентом словаря. Это не было бы Трудно использовать отражение для перебора полей в документе и присвоения их свойствам объекта. Я уже писал такую простую вещь для результатов LDAP в прошлом. Вам не нужно беспокоиться о внедрении sql с помощью Mongo, поскольку на самом деле нет языка запросов, который анализируется. Все водители разговаривают с Mongo на его родном языке. Есть некоторый потенциал, если вы динамически генерируете javascript и отправляете его в БД, но потребность в этом в основном должна быть редкой. Если у вас есть какие-либо вопросы по использованию драйвера, опубликуйте их в группе Google или отправьте сообщение через GitHub.
Все водители разговаривают с Mongo на его родном языке. Есть некоторый потенциал, если вы динамически генерируете javascript и отправляете его в БД, но потребность в этом в основном должна быть редкой. Если у вас есть какие-либо вопросы по использованию драйвера, опубликуйте их в группе Google или отправьте сообщение через GitHub. Все водители разговаривают с Mongo на его родном языке. Есть некоторый потенциал, если вы динамически генерируете javascript и отправляете его в БД, но потребность в этом в основном должна быть редкой. Если у вас есть какие-либо вопросы по использованию драйвера, опубликуйте их в группе Google или отправьте сообщение через GitHub.Вы можете подключаться к текстовым файлам с помощью ADO.NET и читать / записывать их с помощью синтаксиса SQL и команд, выдаваемых через ADO.NET. В этой статье есть пример . Ваши данные будут храниться в удобочитаемом формате в формате записи с разделителями-запятыми или табуляциями. Конечно, с большими наборами данных это не будет быстро. Я не уверен, пытаетесь ли вы уйти от баз данных SQL и синтаксиса SQL. Решения с текстовыми файлами могут быть запрошены с помощью SQL.
Вы также можете сделать то же самое с электронными таблицами Excel, рассматривая их как источники данных SQL (хотя они и не являются) через доступ ADO.NET.
MongoDB не использует магические строки, но использует документы запросов для представления запросов. Также доступен драйвер C # с открытым исходным кодом . Я не уверен в специфике драйвера C #, но относительно легко добавить слой проверки поверх него, если он еще не существует. Например, есть аналогичные проекты поверх драйверов в Python и Ruby.
Не уверен, что это то, что вы ищете, но вы можете попробовать http://www.db4o.com/ Я никогда не использовал его, но может помочь вам