2015-11-30 78 views
1

我試着通過LINQ的在我的ASP MVC應用程序添加前導零:添加前導零的LINQ和Entity Framework

int length = 4; 
IEnumerable<object> query = [...] 
select new 
    { 
     Seq = a.Seq.ToString("D" + length), 
    }).OrderBy(a =>a.Seq).ToList(); 

..但我收到以下錯誤:

Additional information: LINQ to Entities does not recognize the method 'System.String ToString(System.String)' method, and this method cannot be translated into a store expression. 

是什麼正確的方法來做到這一點?

+0

請把你的輸出.... –

+0

我不認爲預先零會有任何影響排序,所以你爲什麼不先做一個ToList()並將它們轉換爲對象,然後你可以運行你的轉換ToString等沒有任何LinqToEntities問題的對象。 – hazimdikenli

回答

8

我覺得String.PadLeft支持(至少在的LINQ到SQL它的工作原理):

Seq = a.Seq.PadLeft(length, '0')} 

如果還是不行(我不能測試它),你可以使用SqlFunctions.Replicate

Seq = SqlFunctions.Replicate("0", length - a.Seq.ToString().Length) + a.Seq 

(需要長度的計算進行修訂,我希望你的想法)

3

從正在使用LINQ到實體(實體框架)的錯誤。

因此,LINQ表達式正在被轉換爲SQL以便在您的數據庫上執行。並且沒有將ToString(string format)直接翻譯成SQL。

你有兩個選擇:

  1. 利用SqlFunctions:LINQ到實體知道如何將這些轉換爲SQL。

  2. 做客戶端上的處理部分(可能在LINQ to Objects中)。

但是,看起來你是用零填充一個數值,然後對它進行排序。爲什麼不在數據上對服務器進行排序,然後在客戶端上進行格式化:使用前導零進行填充以允許數字字符串按照數字排序,但您已經有數字。