0

不能完全摆动这个 copyToDataTable 方法。我正在使用 Linq to Sql 从数据库中获取数据,但是我手动创建表结构而不是使用 DBML 文件,因为我发现这是手动在 DataContexts 之间切换的最简单方法。

我现在得到的是以下错误:

无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Collections.Generic.IEnumerable”。存在显式转换(您是否缺少演员表?)

我正在做的是这样的:

[TABLE(Name = "TableA")]
 class TableA
{
    [Column] public string Name;
    [Column] public string surName;
    [Column] public string concatName;
    [Column] public int ID;
}

 Table<TableA> TableA = definedDataContext.GetTable<TableA>();


IEnumerable<DataRow> que =
                    from res in TableA.AsEnumarable()
                    WHERE someListFromParameters.Contains(res.Name)
                    select res;

Datatable result = que.CopyToDataTable();

错误行显示在WHERE关键字下方,因此就在AsEnumarable()语句之后。

那么,我必须创建一个DataRow基于TableA类的吗?

4

1 回答 1

0

发生错误是因为您试图隐式IEnumerable<TableA>转换为IEnumerable<DataRow>.

您需要做的是创建一个新的DataTable并向其中添加行(没有 DataTable,DataRow 就不能存在)。

这是一个示例(未经测试,但您明白了):

var name = new DataColumn();
name.DataType = typeof(string);
name.ColumnName = "Name";

var surName = new DataColumn();
surName.DataType = typeof(string);
surName.ColumnName = "surName";

var concatName = new DataColumn();
concatName.DataType = typeof(string);
concatName.ColumnName = "concatName";

var id = new DataColumn();
id.DataType = typeof(int);
id.ColumnName = "ID";

var table = new DataTable("TableA");
table.Columns.Add(name);
table.Columns.Add(surName);
table.Columns.Add(concatName);
table.Columns.Add(id);

foreach(var res in TableA.AsEnumerable())
{
    var row = table.NewRow();
    row["name"] = res.Name;
    row["surName"] = res.surName;
    row["concatName"] = res.concatName;
    row["ID"] = res.ID;
    table.Rows.Add(row);
}

最后一点,请查看您的变量/属性名称以使其保持一致。

于 2013-07-31T09:34:25.083 回答