基于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
吗?
由于您试图将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);
}
最后一点,请查看您的变量/属性名称,使其保持一致