代码之家  ›  专栏  ›  技术社区  ›  James Sulak

我可以在Linq to SQL的.OrderBy()中使用IComparer吗?

  •  2
  • James Sulak  · 技术社区  · 16 年前

    这个问题( LINQ and a natural sort order… )讨论如何使用IComparer在Linq中实现自然排序。我过去曾在IEnumerables中成功地使用过它,但我无法使它在LINQtoSQL表达式中工作。这是因为Linq to SQL不支持使用IComparer的.OrderBy()的特定重载吗?

    如果事实上是这样,有什么切实可行的解决办法吗?

    2 回复  |  直到 9 年前
        1
  •  1
  •   Phil Gilmore    16 年前

    不是IComparer不受支持,而是在Linq to Sql中,OrderBy()必须转换为T-Sql操作。如果它允许您指定比较的标准,那么它背后的C代码必须由SQL server执行才能使用。

    如果您需要在linqtosql中执行一些不受支持但可以在T-Sql中执行的操作,那么您可以通过使用存储过程来解决这个问题,存储过程在linqtosql中工作得非常出色。如果不方便,可以调用ToList()方法来调用执行,然后在内存中对其排序。这种方法的实用性取决于数据的大小以及您希望获取的数据量(例如在实现分页时)。

        2
  •  1
  •   Gabe Moothart    16 年前

    ToList() 强制执行查询,然后执行 OrderBy 在名单上。