使用linq结果进行ASP.net gridview排序

时间:2009-06-10 13:46:11

标签: c# asp.net linq linq-to-sql

到目前为止,我有一个linq查询,可以完全使用filterconditions填充数据网格。 但是,当我尝试实现排序时,我失败了。

我有以下代码。它抓住了这种类型的开始。

protected void gvServers_Sorting(object sender, GridViewSortEventArgs e)
{
    if (e.SortDirection == SortDirection.Ascending)
    {
        SortDataAsc(e.SortExpression);
    }
    else if (e.SortDirection == SortDirection.Descending)
    {
        SortDataDesc(e.SortExpression);
    }
}

在这些子方法中,我想要对每个可能的排序表达式进行排序。 但是,当我尝试使用gridview中已有的数据时,它将不允许我使用orderby来获取它

private void SortDataAsc(string p)
{
    var data = gvServers.DataSource;
    switch (p)
    {
        case "domain":
            var sorted = data.nothinghappenshere
        default:
            break;
    }
}

正如你所看到的那样,我无法对数据进行排序,因为它是一个var,因此无法对数据进行排序。

我在网上看到的是,你可以在我尝试在SortDataAsc()中从gridview获取数据,但它似乎没有那样工作。

我只想按结果集中的某个字段排序(在这种情况下是从连接派生的匿名类)

1 个答案:

答案 0 :(得分:1)

嗯,这是因为DataSource是弱类型的。

如果你把它投到IEnumerable<YourDataType>那就应该没事了。但请注意,OrderByOrderByDescending没有排序 - 您必须订购数据,然后重新分配DataSource

你说你的数据类型是匿名类型 - 你必须改变它,我很害怕。匿名类型只能(轻松)以单一方法的强类型方式使用 - 您不能在以后指定名称,因此您不能引用相同的属性等。

将匿名类型转换为命名类型并不是非常困难。 Here's an answer giving an example.