Если вы создаете DataTable из схемы, чтобы она соответствовала вашему LINQ to Sql, у меня есть метод расширения, который принимает IQueryable и заполняет DataTable:
public static DataTable AsDataTable(this IQueryable value, DataTable table)
{
var reader = value.GetEnumerator();
while (reader.MoveNext())
{
var record = (Customer)reader.Current;
table.Rows.Add(record.CustomerID, record.City);
}
return table;
}
Обратите внимание, что приведение к Заказчику - это мой TEntity:
[Table(Name = "Customers")]
public class Customer
{
[Column(IsPrimaryKey = true)]
public string CustomerID;
[Column]
public string City;
}
Существуют и другие параметры, использующие отражение для создания вашей DataTable из класса Customer. Учитывая снижение производительности от отражения, я решил использовать следующий метод для построения моей таблицы:
public DataTable GetSchema(params string[] columns)
{
string col_list;
if (columns.Length == 0)
col_list = "*";
else
col_list = String.Join(", ", columns);
return Provider.QueryAsDataTable(string.Format("select top 0 {0} from customers", col_list));
}
Собрав все это вместе, я смог поместить результаты в мой DataGridView:
dgridRO.DataSource = new DataView(rows.AsDataTable(dmap.GetSchema("CustomerID", "City")));
**
ID10TException:
**
Я потратил все эти усилия на преобразование IQueryable в DataTable, чтобы создать DataView в качестве источника для DataGridView. Ну, я знаю, что мне не нужно было делать это сейчас.