基于Linq-To-Sql表类结构的C#Linq-CopyToDataTable

本文关键字:C#Linq-CopyToDataTable 结构 Linq-To-Sql 基于 | 更新日期: 2023-09-27 18:25:38

无法完全摆动此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()语句之后。

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

基于Linq-To-Sql表类结构的C#Linq-CopyToDataTable

由于您试图将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);
}

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