C# 如何将IQueryable转换为DataTable
我使用LinQ编写查询,并使用C# 如何将IQueryable转换为DataTable,c#,asp.net,visual-studio-2010,linq,C#,Asp.net,Visual Studio 2010,Linq,我使用LinQ编写查询,并使用CopyToDataTable方法。在那一行,它显示了从我的数据库类型到System.Data.DataRow的隐式转换类型错误 var query = from i in dbContext.Personaldetails where i.ID == 1 select i; return query.CopyToDataTable(); 有什么建议吗?CopyToDataTable需要收集
CopyToDataTable
方法。在那一行,它显示了从我的数据库类型到System.Data.DataRow
的隐式转换类型错误
var query = from i in dbContext.Personaldetails
where i.ID == 1
select i;
return query.CopyToDataTable();
有什么建议吗?
CopyToDataTable
需要收集DataRow
对象。看看如何:来解决这个问题
更新:如果您的实体具有可空字段,则可以修改ObjectShreder.ExtendTable
方法。查找将新列添加到表中的位置,并删除第二个参数,该参数提供列中的数据类型(DataColumn类不支持可为空的数据类型):
我已经实现了该逻辑,但在query.copytodatatable上显示了无法隐式转换类型的错误。@nanicharan请确保使用
CustomLINQtoDataSetMethods
,而不是从LINQ到dataset的方法。@nanicharan我最近用完全相同的代码创建了表。从msdn复制粘贴即可。并确保使用CustomLINQtoDataSetMethods
extension。例如,您可以直接调用它CustomLINQtoDataSetMethods.CopyToDataTable(查询)
似乎您在其他类中声明了CustomLINQtoDataSetMethods
类。直接在某些命名空间中将其移动到顶层。此外,您还可以验证属性类型是否可为Nulltype.IsGenericType&&(type.GetGenericTypeDefinition()==typeof(nullable))
并改为提供可为Null的参数类型p.PropertyType.GetGenericArguments()[0]
foreach (PropertyInfo p in type.GetProperties())
{
if (!_ordinalMap.ContainsKey(p.Name))
{
DataColumn dc = table.Columns.Contains(p.Name) ? table.Columns[p.Name]
// do not provide column type
: table.Columns.Add(p.Name);
_ordinalMap.Add(p.Name, dc.Ordinal);
}
}