需要解决 C# 错误 u003Ef__AnonymousType0
Need to solve C# Error u003Ef__AnonymousType0
我有如下 C# 代码,它在 IEnumerable<\u003C\u003Ef__AnonymousType0
处显示错误
谁能告诉我怎么解决。
dataSet = this.GetData.getInfo("SELECT b.nBatchID, td.F_Name &' '& td.M_Name &' '& td.L_Name AS StaffName, b.BatchName FROM (Batch AS b LEFT JOIN BatchTrainer AS bt ON b.nBatchID = bt.nBatchId) LEFT JOIN TrainerDetails AS td ON bt.TrainerId = td.TrainerID", "Batch");
IEnumerable<\u003C\u003Ef__AnonymousType0<object, string, string>> datas = dataSet.Tables[0].Copy().AsEnumerable().GroupBy<DataRow, object>((Func<DataRow, object>) (row => row["nBatchId"])).Select(g =>
{
var data = new{ id = g.Key, text = string.Join(",", g.Select<DataRow, string>((Func<DataRow, string>) (r => r["StaffName"].ToString())).ToArray<string>()), Batch = g.Select<DataRow, string>((Func<DataRow, string>) (r => r["BatchName"].ToString())).FirstOrDefault<string>() };
return data;
});
table.Columns.Add("nBatchId", typeof (int));
table.Columns.Add("StaffName", typeof (string));
table.Columns.Add("BatchName", typeof (string));
foreach (var data in datas)
table.Rows.Add(data.id, (object) data.text, (object) data.Batch);
dataSet.Tables.Clear();
dataSet.Tables.Add(table);
处理匿名类型时不要指定类型名称。使用 var
来让编译器为您推断类型:
var datas = dataSet.Tables[0].Copy().AsEnumerable()
.GroupBy(row => row.Field<int>("nBatchId"))
.Select(g => new {
id = g.Key,
text = string.Join(",", g.Select(r => r.Field<string>("StaffName")),
Batch = g.Select(r => r.Field<string>("BatchName")).FirstOrDefault()
});
其他注意事项:
- 不要为 LINQ 扩展方法指定泛型参数。编译器将从源序列的类型推断通用参数
- 不要为 LINQ 扩展方法指定谓词类型。同上,编译器将从源序列
推断类型
- 对
DataRow
使用 Field<T>("columnName")
扩展名以获得正确键入的单元格值
- 不要仅仅为了查询而创建 DataTable 的副本。 LINQ 不会修改原始 DataTable
- 不要将要传递给
String.Join
method into array. There is method overload which accepts IEnumerable<T>
的值放入
我有如下 C# 代码,它在 IEnumerable<\u003C\u003Ef__AnonymousType0
处显示错误
谁能告诉我怎么解决。
dataSet = this.GetData.getInfo("SELECT b.nBatchID, td.F_Name &' '& td.M_Name &' '& td.L_Name AS StaffName, b.BatchName FROM (Batch AS b LEFT JOIN BatchTrainer AS bt ON b.nBatchID = bt.nBatchId) LEFT JOIN TrainerDetails AS td ON bt.TrainerId = td.TrainerID", "Batch");
IEnumerable<\u003C\u003Ef__AnonymousType0<object, string, string>> datas = dataSet.Tables[0].Copy().AsEnumerable().GroupBy<DataRow, object>((Func<DataRow, object>) (row => row["nBatchId"])).Select(g =>
{
var data = new{ id = g.Key, text = string.Join(",", g.Select<DataRow, string>((Func<DataRow, string>) (r => r["StaffName"].ToString())).ToArray<string>()), Batch = g.Select<DataRow, string>((Func<DataRow, string>) (r => r["BatchName"].ToString())).FirstOrDefault<string>() };
return data;
});
table.Columns.Add("nBatchId", typeof (int));
table.Columns.Add("StaffName", typeof (string));
table.Columns.Add("BatchName", typeof (string));
foreach (var data in datas)
table.Rows.Add(data.id, (object) data.text, (object) data.Batch);
dataSet.Tables.Clear();
dataSet.Tables.Add(table);
处理匿名类型时不要指定类型名称。使用 var
来让编译器为您推断类型:
var datas = dataSet.Tables[0].Copy().AsEnumerable()
.GroupBy(row => row.Field<int>("nBatchId"))
.Select(g => new {
id = g.Key,
text = string.Join(",", g.Select(r => r.Field<string>("StaffName")),
Batch = g.Select(r => r.Field<string>("BatchName")).FirstOrDefault()
});
其他注意事项:
- 不要为 LINQ 扩展方法指定泛型参数。编译器将从源序列的类型推断通用参数
- 不要为 LINQ 扩展方法指定谓词类型。同上,编译器将从源序列 推断类型
- 对
DataRow
使用Field<T>("columnName")
扩展名以获得正确键入的单元格值 - 不要仅仅为了查询而创建 DataTable 的副本。 LINQ 不会修改原始 DataTable
- 不要将要传递给
String.Join
method into array. There is method overload which acceptsIEnumerable<T>
的值放入