代码之家  ›  专栏  ›  技术社区  ›  Soul_Master

在EF4.0中创建自定义排序(如“07/2010”)的最佳方法是什么?

  •  0
  • Soul_Master  · 技术社区  · 15 年前

    -- This code should work if amount of data is less than 1000 record per year.
    CAST(SUBSTRING(ReceiveID, 0, CHARINDEX('/', ReceiveID)) AS INT) + 1000 * CAST(SUBSTRING(ReceiveID, CHARINDEX('/', ReceiveID) + 1, 4) AS INT)  AS OrderReceiveID
    

    但是,我想用ef4.0编写这段代码,但是我遇到了一些问题。

    其次,在数据库中创建标量值函数,用于将年度序列数据字符串转换为整数,如1/2010到20100001。但我不能将它导入到edmx文件,因为它只支持存储过程。

    你有没有什么办法解决这个问题而不接触数据库,或者像我的第二个想法那样创建共享函数将序列数据转换成整数值?

    谢谢,

    1 回复  |  直到 15 年前
        1
  •  0
  •   Devart    15 年前

    你可以试着用 ExecuteStoreQuery 方法。
    在这种情况下,您将能够使用上述方法进行排序(并执行任何其他本机SQL)。
    代码如下所示:

    
      var q = context.ExecuteStoreQuery("SELECT ReceiveID, SomeField, SomeOtherField, ...  from Model1.MyEntity order by CAST(SUBSTRING(ReceiveID, 0, CHARINDEX('/', ReceiveID)) AS INT) + 1000 * CAST(SUBSTRING(ReceiveID, CHARINDEX('/', ReceiveID) + 1, 4) AS INT)");