您必须在 ExecuteStoreQuery 中指定类型(类以及固定属性)。您还有另一个可以使用的替代选项。我用四个简单的步骤来解释:
1) 将结果集检索到DataTable中
private DataTable GetResultReport()
{
DataTable retVal = new DataTable();
EntityConnection entityConn = (EntityConnection)db.Connection;
SqlConnection sqlConn = (SqlConnection)entityConn.StoreConnection;
using (SqlCommand cmdReport = sqlConn.CreateCommand())
{
cmdReport.CommandType = CommandType.StoredProcedure;
cmdReport.CommandText = "proc_GetData";
SqlDataAdapter daReport = new SqlDataAdapter(cmdReport);
using (cmdReport)
{
daReport.Fill(retVal);
}
}
return retVal;
}
2)将DataTable转换为IDictionary类型的List
private List<IDictionary> ConvertToDictionary(DataTable dtObject)
{
var columns = dtObject.Columns.Cast<DataColumn>();
var dictionaryList = dtObject.AsEnumerable()
.Select(dataRow => columns
.Select(column =>
new { Column = column.ColumnName, Value = dataRow[column] })
.ToDictionary(data => data.Column, data => data.Value)).ToList().ToArray();
return dictionaryList.ToList<IDictionary>();
}
3)然后循环遍历IDictionary类型的List并将其添加到Dynamic类型的List类型中,以便将其与webgrid绑定:
public List<dynamic> GetData()
{
var resultset = ConvertToDictionary(GetResultReport());
var result = new List<dynamic>();
foreach (var emprow in resultset)
{
var row = (IDictionary<string, object>)new ExpandoObject();
Dictionary<string, object> eachRow = (Dictionary<string, object>)emprow;
foreach (KeyValuePair<string, object> keyValuePair in eachRow)
{
row.Add(keyValuePair);
}
result.Add(row);
}
return result;
}
4) 视图中的WebGrid绑定代码(.cshtml):
WebGrid grid = new WebGrid(Model.OfficerOverViewList, rowsPerPage: 5);
@grid.GetHtml(tableStyle: "webgrid",
alternatingRowStyle: "webgrid-alternating-row",
headerStyle: "webgrid-header",
footerStyle: "webgrid-footer",
selectedRowStyle: "webgrid-selected-row",
rowStyle: "webgrid-row-style");