Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将IQueryable转换为DataTable_C#_Asp.net_Visual Studio 2010_Linq - Fatal编程技术网

C# 如何将IQueryable转换为DataTable

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需要收集

我使用LinQ编写查询,并使用
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
类。直接在某些命名空间中将其移动到顶层。此外,您还可以验证属性类型是否可为Null
type.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);
    }
}