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();