首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将LINQ结果复制到数据集/表格

将LINQ结果复制到数据集/表格
EN

Stack Overflow用户
提问于 2011-06-24 17:21:52
回答 4查看 1.9K关注 0票数 1

我正在处理一个表单,它有几个数据网格视图,这些视图是从LINQ查询中填充的,没有问题,它应该工作,但排序不工作。在做了一些阅读之后,因为LINQ结果不支持排序。

由于我已经有了LINQ结果,有没有一种方法可以将结果复制到dataset或datatable中,然后将数据网格视图绑定到该数据网格视图,以便排序工作?

谢谢

编辑:感谢大家的回答,遗憾的是,我休假两周,所以不能尝试和提升正确的答案。然而,当我返回时,它将是我列表的首位

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-12 18:42:06

最后,我使用了每个选项中的位,并进行了一些调整以使其与可空字段一起工作。

第一件事是将CopyToDataTable函数放到VB中,这是在这里完成的

http://msdn.microsoft.com/en-us/library/bb669096.aspx

当我尝试这样做时,如果列是可以为空的,那么它将失败,所以我搜索并找到了一个可以工作的代码的mod。这里是它的全部

代码语言:javascript
运行
复制
Public Function ExtendTable(ByVal table As DataTable, ByVal type As Type) As DataTable
     For Each f As FieldInfo In type.GetFields()
       If (Not _ordinalMap.ContainsKey(f.Name)) Then
         Dim dc As DataColumn
         dc = If(table.Columns.Contains(f.Name), table.Columns(f.Name), table.Columns.Add(f.Name, f.FieldType))
         _ordinalMap.Add(f.Name, dc.Ordinal)
       End If
     Next f
     For Each p As PropertyInfo In type.GetProperties()
       If Not _ordinalMap.ContainsKey(p.Name) Then
         Dim colType As Type = p.PropertyType
         If (colType.IsGenericType) AndAlso (colType.GetGenericTypeDefinition() Is GetType(Nullable(Of ))) Then
           colType = colType.GetGenericArguments()(0)
         End If
         Dim dc As DataColumn = IIf(table.Columns.Contains(p.Name), table.Columns(p.Name), table.Columns.Add(p.Name, colType))
         _ordinalMap.Add(p.Name, dc.Ordinal)
       End If
     Next
     Return table
    End Function

我只是选择了这个选项,因为它更简洁。

票数 2
EN

Stack Overflow用户

发布于 2011-06-24 18:20:10

为此,您可以使用CopyToDataTable扩展方法。

这个方法的标准实现只在IEnumerable<T>上工作,其中T是DataRow类型,但是在MSDN上有一个制作自己的extension method which works on anonymous types的例子。

我实际上没有使用过CopyToDataTable,在过去我通过创建一个支持排序的BindingList来创建类似的最终结果,然后在构造函数中使用查询作为IList来创建它的一个实例,但是CopyToDataTable方法对我来说看起来要干净得多。

票数 2
EN

Stack Overflow用户

发布于 2011-06-24 17:26:03

在C#中,我是这样做的:

代码语言:javascript
运行
复制
        DataTable dt = new DataTable();
        dt.Columns.Add("a", Type.GetType("System.String"));
        dt.Columns.Add("b", Type.GetType("System.String"));
        dt.Columns.Add("c", Type.GetType("System.String"));
        dt.Columns.Add("d", Type.GetType("System.String"));

        foreach (var row in [linqQueryName] )
        {
            DataRow destRow = dt.NewRow();
            destRow["a"] = row.linqCol1;
            destRow["b"] = row.linqCol2;
            destRow["c"] = row.linqCol3;
            destRow["d"] = row.linqCol4;
            dt.Rows.Add(destRow);
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6465847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档