我有一个对象Ob,有几个字段f1,..,fn(不同类型)。 现在,GridView中显示了一个对象列表,我需要实现排序方法。
真正的问题是: 我该怎么办
(from ob in Ob_list orderby ob.f1 ascending)
当排序字段由字符串表示时(即“f1”)? 不幸的是我无法通过反射得到它(我无法做像ob.GetType()。GetField(“f1”),这不会映射到sql代码。)
我有几个字段可能对行进行排序,这是最好和最快的方法吗?
非常感谢!
答案 0 :(得分:0)
LINQ执行被推迟到您实际枚举结果或访问" count"等等。因此,您可以分阶段构建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
}
答案 1 :(得分:0)
我发现了这个问题:How do I specify the Linq OrderBy argument dynamically?
我使用的是实体框架,所以第一个答案并没有解决我的问题。然而,第二个工作得很好!
希望它有所帮助!