Я получаю большое количество данных из службы RIA. тип возврата имеет группу объектов, таких как RouteA, HistroyRouteA. У HistroyLogRouteA есть записи за разные годы с тем же уникальным ключом.Скрытая коллекция объектов для коллекции словаря <строка, объект>
Я должен динамически связывать эти данные с RadGridView. Всегда у меня есть неизвестные столбцы в результате. Для этого я последовал за
http://www.telerik.com/forums/rowdetailstemplate-binding-with-dynamic-data
И построить Мою коллекцию данных с кодом:
private void OnShowPreviousYear(object parameter)
{
GridViewHeaderCell cell = parameter as GridViewHeaderCell;
var head = cell.Column.Header;
this.context.Load<Route>(this.context.GetRoutesQuery(), LoadBehavior.MergeIntoCurrent, OnRouteHistoryLoadComplete, null);
}
private void OnRouteHistoryLoadComplete(LoadOperation<Route> lo)
{
object ro = null;
if (lo.Entities != null)
{
this.context.Load<Routeshistory>(this.context.GetRouteshistoriesQuery(), LoadBehavior.MergeIntoCurrent, (lp) =>
{
Route recent = lo.Entities.FirstOrDefault();
int year =(int)recent.Hpmsyear-1;
var rows = this.context.Routes.Join(this.context.Routeshistories,
r => r.Routeid.ToString(),
h => h.Routeid.ToString(),
(r, h) => new { r, h });//.Where(t => t.r.Routeid == t.h.Routeid);
RoutesGridData = new ObservableCollection<DataRow>();
int count = 0;
foreach (var tmpR in rows)
{
//Debug.WriteLine(tmpR.r.Routeid + " -- " + tmpR.h.Routeid);
if (count < 50)
{
DataRow row = new DataRow();
if (tmpR.r is Route)
{
Type type = tmpR.r.GetType();
foreach (PropertyInfo info in type.GetProperties())
{
// Debug.WriteLine(info.Name + "--- NAME OF PRR");
var val = info.GetValue(tmpR.r, null);
if (!info.Name.Equals("EntityConflict")
&& !info.Name.Equals("ValidationErrors")
&& !info.Name.Equals("HasValidationErrors")
&& !info.Name.Equals("EntityState")
&& !info.Name.Equals("HasChanges")
&& !info.Name.Equals("IsReadOnly")
&& !info.Name.Equals("EntityActions"))
{
row[info.Name] = val;
}
}
}
// other tables...
RoutesGridData.Add(row);
}
count++;
}
}, null);
}
// var b = ro;
}
этот код прекрасно работает для небольшой записи, как 50 строк. но я, когда пытаюсь преобразовать все данные, становится медленным. и сбои экрана. Я думаю, это из-за Reflection. Есть ли другой способ конвертировать данные извлечения в словарь? Значит, я могу сопоставить свою таблицу со словарем в Entity Framework, или Linq может сделать это для меня, не делая мой код медленным и т. Д.
Мои объекты сопоставлены с EF 6 & Я использую соединитель оракула Deart.