1

我有一个对象 Ob 有几个字段 f1,..,fn (不同类型)。现在对象列表显示在 GridView 中,我需要实现排序方法。

真正的问题是:我怎么能跑

(from ob in Ob_list orderby ob.f1 ascending)

当排序字段由字符串表示时(即“f1”)?不幸的是,我无法通过反射获得它(我无法执行诸如 ob.GetType().GetField("f1") 之类的操作,这未映射到 sql 代码中)。

我有几个字段可能对行进行排序,这是最好和最快的方法?

非常感谢!

4

2 回答 2

0

LINQ 执行会延迟到您实际枚举结果或访问“计数”等。因此,您可以分阶段构建 LINQ 语句。

下面的代码是在 C# 中完成的,但我确信在 VB.NET 中是可能的。

首先设置您的基本查询:

var query = (from ob in Ob_list);

此时,由于延迟执行,实际上没有任何东西进入数据库。

接下来,有条件地按组件添加您的订单:

if (sortField == "f1")
{
  query = query.OrderBy(o => o.f1);
}
else if (sortField == "f2")
{
  query = query.OrderBy(o => o.f2);
}
else 
{
  //...
}

最后,收集你的结果

foreach (var item in query)
{
  // Process the item
}
于 2013-07-17T21:33:30.250 回答
0

我发现了这个问题:如何动态指定 Linq OrderBy 参数?

我正在使用实体框架,所以第一个答案并没有解决我的问题。然而,第二个效果很好!

希望能帮助到你!

于 2016-08-02T13:17:04.673 回答