Вы можете сделать следующее:
public jsonResult Get()
{
DbCommand cmd = _humanContext.DbContext.Database.GetDbConnection().CreateCommand()
cmd.CommandText = "yourspName";
cmd.CommandType = CommandType.StoredProcedure;
using (IDataReader reader = await cmd.ExecuteReaderAsync())
{
List<Foo> items= reader.Select(r => r.GetYourPocoClassModel()).ToList();
string rItems = JsonConvert.SerializeObject(items, Formatting.Indented,
new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});
return rItems;
}
}
и GetYourPocoClassModel для моделирования ваших данных:
public Calss HelperExtension
{
public static Foo GetYourPocoClassModel(this IDataReader r)
{
return new Foo
{
Id=r["Id"] is DBNull ? 0 : Convert.ToDouble(r["Id"]),
}
}
}
Как контейнеры стиля STL, контейнеры указателя имеют a value_type
определение типа, которое можно использовать:
#include <boost/ptr_container/ptr_map.hpp>
#include <boost/foreach.hpp>
int main()
{
typedef boost::ptr_map<int, int> int_map;
int_map mymap;
BOOST_FOREACH(int_map::value_type p, mymap)
{
}
}
Я нахожу, что использование определения типа для контейнера делает код намного легче записать.
Кроме того, необходимо постараться не использовать содержание detail
пространства имен в повышении, это - конвенция повышения, что они содержат детали реализации.
Этот пример кода, скомпилированный для меня с g ++ 4.1.2:
#include "boost/ptr_container/ptr_map.hpp"
#include "boost/foreach.hpp"
int main()
{
boost::ptr_map<int, int> mymap;
typedef boost::ptr_container_detail::ref_pair<int, int* const> IntPair;
BOOST_FOREACH(IntPair p, mymap)
{
int i = p.first;
}
return 0;
}
Это должно скомпилировать без ссылки:
BOOST_FOREACH (IntTpair p, mymap)
Я думаю, что проблема состоит в том, что карты на самом деле не хранят объекты как пар, но как древовидная структура с первым элементом как ключ, таким образом, BOOST_FOREACH не может получить ссылку на пару, но он может создать временную копию одной.
Сегодня я столкнулся с той же проблемой. К сожалению, предложение Дэниела не сработает при постоянной ссылке на карту. В моем случае ptr_map был членом класса, и я хотел зациклировать его в функции-член const. Позаимствовав пример Даниила, мне пришлось сделать это в моем случае:
#include "boost/ptr_container/ptr_map.hpp"
#include "boost/foreach.hpp"
int main()
{
typedef boost::ptr_map<int, int> int_map;
int_map mymap;
const int_map& mymap_const_ref(mymap);
BOOST_FOREACH(int_map::const_iterator::value_type p, mymap_const_ref)
{
}
}
Кажется, что int_map::const_iterator::value_type
эквивалентно boost::ptr_container_detail::ref_pair
.