Справочная информация:
У меня есть следующий код в службе WCF. GetDataTable возвращает System.Data.DataTable на основе вызова базы данных SQL с переданным параметром query .
public IEnumerable<Dictionary<string, object>> GetData(string *query*) {
var table = GetDataTable(query);
var columns = table.Columns.Cast<DataColumn>();
var dict = table.AsEnumerable()
.Select(r => columns.Select(c => new {
Column = c.ColumnName,
Value = r[c]
})
.ToDictionary(i => i.Column, i => i.Value != DBNull.Value ? i.Value : null));
return dict;
}
У меня есть приложение Silverlight, которое вызывает GetData, передает строку, и я получаю результаты. Однако в моем GridView есть поля «Comparer», «Count», «Keys» и «Value».
Фрагмент кода Silverlight
WCFCLIENT oData = new WCFCLIENT ();
oData.GetData+= new EventHandler<GetDataCompletedEventArgs>(oData_GetData);
oData.GetData(*sqlquery*);
}
}
void oData_GetDataCompleted(object sender, GetDataCompletedEventArgs e) {
if (e.Error == null) {
rdpPaging.Source = e.Result;
rgvDataResults.ItemsSource = rdpPaging.Source;
}
Мой вопрос двоякий
- Является ли код, который я использую для создания словаря, каким-то образом неправильным?
- Если код правильный, как правильно установить источник данных DataGrid, чтобы он отображал столбцы и строки, возвращаемые вызовом SQL?
Я пробовал связываться с различными свойствами переменной e.Result, но у меня были похожие результаты.