C# 名为';项目';已属于此数据表
我正在尝试使用扩展方法将C# 名为';项目';已属于此数据表,c#,asp.net,C#,Asp.net,我正在尝试使用扩展方法将列表转换为数据表。实施是: 扩展方法 在第行出现上述错误: dataTable.Columns.Add(prop.Name); 有人能找到问题所在吗 您的ToDataTable方法需要一个对象列表,很可能是一个简单DTO或类似对象的列表 您正在向它传递一个DataRow实例列表,该类有多个实例,这意味着当您尝试构建新的DataTable时,它将尝试添加多个名为项的列,这在DataTable中无效 解决这个问题的方法是将节点投影到一个新对象,而不是保留数据行: publi
列表
转换为数据表
。实施是:
扩展方法
在第行出现上述错误:
dataTable.Columns.Add(prop.Name);
有人能找到问题所在吗 您的
ToDataTable
方法需要一个对象列表,很可能是一个简单DTO或类似对象的列表
您正在向它传递一个DataRow
实例列表,该类有多个实例,这意味着当您尝试构建新的DataTable
时,它将尝试添加多个名为项的列,这在DataTable
中无效
解决这个问题的方法是将节点
投影到一个新对象,而不是保留数据行
:
public class MyClass
{
public string Name{get;set;}
public string Date{get;set;}
}
var noDups = firstTable.AsEnumerable()
.GroupBy(d => new
{
name = d.Field<string>("name"),
date = d.Field<string>("date")
})
.Where(d => d.Count() > 1)
.Select(d => {
var first = d.First();
return new MyClass()
{
Name = (string)first["name"],
Date = (string)first["date"]
}
})
.ToList();
公共类MyClass
{
公共字符串名称{get;set;}
公共字符串日期{get;set;}
}
var noDups=firstTable.AsEnumerable()
.GroupBy(d=>new
{
名称=d.字段(“名称”),
日期=d.字段(“日期”)
})
.Where(d=>d.Count()>1)
.选择(d=>{
var first=d.first();
返回新的MyClass()
{
Name=(字符串)first[“Name”],
日期=(字符串)第一个[“日期”]
}
})
.ToList();
您遇到的问题是,您在datatable中添加了4列,然后调用toDataTable尝试添加所有列columns@BugFinder这不是问题所在,但这是毫无意义的,因为OP然后将其与下面的调用ToDataTable
一起丢弃。我错过了这一点-好的一点我可能错了,因为正确的术语不是我的强项,但我不认为这是一种扩展方法:OGood work。虽然它给了我正确的输出,但我仍然对“该类有多个属性项重载”感到困惑,这意味着当您尝试构建新的DataTable时,它将尝试添加多个列,其中的名称项在DataTable中无效。”@我有意将这句话与一些文档联系起来——你是否遵循了它,阅读并理解了它?或者,只需按原样逐步浏览代码,代码应该是清晰的。
An exception of type 'System.Data.DuplicateNameException' occurred in System.Data.dll but was not handled in user code
Additional information: A column named 'Item' already belongs to this DataTable.
dataTable.Columns.Add(prop.Name);
public class MyClass
{
public string Name{get;set;}
public string Date{get;set;}
}
var noDups = firstTable.AsEnumerable()
.GroupBy(d => new
{
name = d.Field<string>("name"),
date = d.Field<string>("date")
})
.Where(d => d.Count() > 1)
.Select(d => {
var first = d.First();
return new MyClass()
{
Name = (string)first["name"],
Date = (string)first["date"]
}
})
.ToList();