我正在处理一个表单,它有几个数据网格视图,这些视图是从LINQ查询中填充的,没有问题,它应该工作,但排序不工作。在做了一些阅读之后,因为LINQ结果不支持排序。
由于我已经有了LINQ结果,有没有一种方法可以将结果复制到dataset或datatable中,然后将数据网格视图绑定到该数据网格视图,以便排序工作?
谢谢
编辑:感谢大家的回答,遗憾的是,我休假两周,所以不能尝试和提升正确的答案。然而,当我返回时,它将是我列表的首位
发布于 2011-07-12 18:42:06
最后,我使用了每个选项中的位,并进行了一些调整以使其与可空字段一起工作。
第一件事是将CopyToDataTable函数放到VB中,这是在这里完成的
http://msdn.microsoft.com/en-us/library/bb669096.aspx
当我尝试这样做时,如果列是可以为空的,那么它将失败,所以我搜索并找到了一个可以工作的代码的mod。这里是它的全部
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我只是选择了这个选项,因为它更简洁。
发布于 2011-06-24 18:20:10
为此,您可以使用CopyToDataTable扩展方法。
这个方法的标准实现只在IEnumerable<T>上工作,其中T是DataRow类型,但是在MSDN上有一个制作自己的extension method which works on anonymous types的例子。
我实际上没有使用过CopyToDataTable,在过去我通过创建一个支持排序的BindingList来创建类似的最终结果,然后在构造函数中使用查询作为IList来创建它的一个实例,但是CopyToDataTable方法对我来说看起来要干净得多。
发布于 2011-06-24 17:26:03
在C#中,我是这样做的:
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);
}https://stackoverflow.com/questions/6465847
复制相似问题