我尝试通过以下代码编写一些关于生成匿名类型列表的代码:
public static List<T> MakeList<T>(T itemOftype)
{
List<T> newList = new List<T>();
newList.Add(itemOftype);
return newList;
}
但是错误让我回答:
通过指定的主键字段 找不到KeyFieldName属性 基础数据源。确保 字段名称拼写正确。 注意角色案例。
Main.cs
var Qry = from tableRaletions in taskMaints.TaskRelations
where tableRaletions.TaskId == Convert.ToInt32(txtID.Text) && tableRaletions.RelTypeId == 12
select new
{
tableRaletions.RefMaintenance.code,
tableRaletions.RefMaintenance.shortdesc
};
GridMaintenanceData.DataSource = SetCalculatedTaskField.MakeList(Qry);
GridMaintenanceData.DataBind();
答案 0 :(得分:1)
我没有看到你的扩展方法的重点,因为已经有一个ToList扩展方法,并且会创建你的anymous类型的列表,你的方法将做的是创建一个列表,其中包含一个单独的项目是您的匿名类型的IQueryable。其次,错误是说GridMaintenanceData有一个名为KeyFieldName的属性,你在那里指定了一个在你绑定它的数据源中不存在的字段名,可能是因为你的愚蠢的MakeList方法。
请改为:
var Qry = from tableRaletions in taskMaints.TaskRelations
where tableRaletions.TaskId == Convert.ToInt32(txtID.Text) && tableRaletions.RelTypeId == 12
select new
{
tableRaletions.RefMaintenance.code,
tableRaletions.RefMaintenance.shortdesc
};
GridMaintenanceData.DataSource = Qry.ToList();
GridMaintenanceData.DataBind();
答案 1 :(得分:1)
您已经指定了DataSource中不存在的KeyFieldName。究竟错误是什么。据我所知,这与您的通用列表的填充无关。
从您的示例中,我猜测您的主键是RelationId
,而您的KeyFieldName
设置为该属性。因此,只需更改确保在您的选择中返回RelationId:
select new
{
tableRaletions.RefMaintenance.RelationId // It's spelt `relations` by the way.
tableRaletions.RefMaintenance.code,
tableRaletions.RefMaintenance.shortdesc
};
答案 2 :(得分:0)
这是你的代码:
public static List<T> MakeList<T>(T itemOftype)
{
List<T> newList = new List<T>();
newList.Add(itemOftype);
return newList;
}
你有什么不直接使用List<T>
? MakeList<T>
的目的是什么?和
SetCalculatedTaskField.MakeList(Qry)
可以更容易:
Qry.ToList();