【问题标题】:LINQ query in C# using string on the fly to ORDER data在 C# 中使用字符串即时查询 ORDER 数据
【发布时间】:2015-01-30 19:55:56
【问题描述】:

我有一个带有两个字符串的函数。无法弄清楚如何将这两个字符串合并到 LINQ 查询中。

这是我的功能:

private void DataBind_GridView_Search(string OptionalArgsSortExpression = "", string OptionalArgsSortDirection = "")
{
List<mainSearchDataModel> Query = GetData();
if (Query != null)
{


    /* Problem ... */
    Query = from x in Query
            orderby OptionalArgsSortExpression.ToString() OptionalArgsSortDirection.ToString()
            select x;
    /* Problem ... */


    GridView_Search.DataSource = Query;
    GridView_Search.DataBind();
}

任何 cmets 将不胜感激。

这是我得到的错误。我也没有使用 LINQ。

'System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumerable, System.Func)' 无法从用法中推断出来。尝试明确指定类型参数。

更新:

有没有办法对 List 或 IEnumerable 中的任何一个进行排序。看来我尝试的一切都不起作用。

有一种方法可以将其转换为 DataView,但我也遇到了麻烦,不想那样做。

【问题讨论】:

  • 为什么不通过Func&lt;mainSearchDataModel, TOrderBy&gt;bool 来确定是升序还是降序?
  • @juharr 这是 gridview 排序的事件处理程序;该字符串由gridview传递。不能改为传递Func

标签: c# .net linq reflection


【解决方案1】:

您可以尝试这样的事情(如果您使用 LINQ,正如 Servy 在他的评论中指出的那样。):

var query = query.OrderBy(String.Format("{0} {1}",OptionalArgsSortExpression,OptionalArgsSortDirection));

【讨论】:

  • 假设他已经在使用 LINQ,但没有迹象表明他在使用。
  • @Servy 我将把它包含在我的答案中。我没有任何其他想法。
  • 这当然是寻找高质量答案的困难所在。最佳答案应该考虑到问题的约束。
  • @maxwellb 我并不声称我的答案或我的任何答案都是最好的。要么提供解决方案,要么不提供。此外,我更新了我的答案,包括 Servy 的评论。
  • @Christos 我并不是说这是个人的,而是作为对网站格式所面临挑战的陈述。我们努力作为一个社区来管理高质量的问题和高质量的答案。在这种情况下,通过 cmets 和反馈,OP 没有使用 LINQ,因此取决于 LINQ 的答案不会回答 OP 的问题。
【解决方案2】:

您可以使用我的 OrderByString 扩展。它将字符串转换为对实际 OrderBy 方法的调用,因此它与所有 Linq 提供程序兼容。

using OrderByExtensions;

Query = Query.OrderBy(OptionalArgsSortExpression.ToString()
     + " " + OptionalArgsSortDirection.ToString())

https://github.com/Grax32/OrderByString

https://www.nuget.org/packages/OrderByString/

【讨论】:

  • 我会这样做,但由于我的项目是这样的,我们不允许添加未经批准的包。这很有帮助,但我不能使用它。
  • 您可以随时从 github 获取源文件并将它们放入您的项目中。我将这个作为公共领域发布,所以没有阻碍你这样做的障碍。
【解决方案3】:

你可以走这条路

GridView.DataSource = Query.OrderBy(o => o.Field1).ThenBy(t => t.Field2).ToList()

【讨论】:

  • 他不知道编译时会对哪些属性进行排序。
猜你喜欢
  • 1970-01-01
  • 2014-06-08
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 2021-02-26
  • 2012-05-10
  • 1970-01-01
相关资源
最近更新 更多