문제

can't quite swing this copyToDataTable method. I'm using Linq to Sql to get my data from the database, but I'm creating my table structures manually and not using DBML files as I found this to be the easiest way to switch between DataContexts manually.

What I get now is the following error:

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'System.Collections.Generic.IEnumerable'. An explicit conversion exists (are you missing a cast?)

What I'm doing is this:

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

The error line shows up under the WHERE keyword, so just after the AsEnumarable() statement.

So, do I have to create a DataRow based off the TableA class?

도움이 되었습니까?

해결책

The error occurs because you are trying to implicitly cast IEnumerable<TableA> to IEnumerable<DataRow>.

What you need to do is create a new DataTable and add rows to it (DataRow can not exist without a DataTable).

Here's an example (untested, but you get the idea):

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

One final note, please have a look at your variable/property names to make them consistent.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top