2012-09-04 128 views
4

我有一個linq查詢成功執行,其中一個返回的列是一個十進制類型,用來表示價格以磅和便士(將永遠不會有任何負值)c#只顯示小數點後的數字與linq

我希望能夠給英鎊和便士去掉了我的投影單獨的屬性,但是使用功能時,如不支持

var result= from j in context.Products 

select 
    new{ 
    Price = t.Price,              
    PricePounds = Math.Truncate(t.Price) 
    }; 

我得到一個錯誤Math.truncate,因爲它不能翻譯成商店表達。我怎樣才能從這個查詢獲得磅值?

回答

4

如果您不需要做任何事情在以後的數據庫,最簡單的方法就是進行截斷客戶端:

var query = context.Products 
        .AsEnumerable() // Everything from here is LINQ to Objects 
        .Select(p => new { 
           p.Price, 
           PricePounds = Math.Truncate(p.Price) 
          }); 

注意,你可能還需要只投給int - 和可能已經在EF中支持。

編輯:正如評論中指出的那樣,您可能需要先執行投影,例如,

var query = context.Products 
        .Select(p => new { p.Price, p.SomethingElse }) 
        .AsEnumerable() // Everything from here is LINQ to Objects 
        .Select(p => new { 
           p.Price, 
           PricePounds = Math.Truncate(p.Price), 
           p.SomethingElse 
          }); 

(其中SomethingElse是另一種屬性,你有興趣,作爲一個例子 - 我懷疑你想要的價格。)

這將避免整個實體被獲取,只有當你想要一些屬性。

+1

如果'Products'有很多字段,那麼在AsEnumerable()之前做一個選擇是值得的,以減少檢索到的字段數量。 –

+0

@JonHanna:是的,是的。將編輯。 –

+0

這是我正在尋找。我確實有幾個額外的屬性,並且還有一個連接,所以編輯後的響應正是我正在尋找的。謝謝回覆! – user1268548

4

你可以試試:

var result= from j in context.Products 
select 
    new { 
     Price = t.Price,              
     PricePounds = EntityFunctions.Truncate(t.Price, 0) 
     }; 

的情況是Math.Truncate不能轉換成SQL其中EntityFunctions.Truncate應該的。

+0

看着它,我想他們想'EntityFunctions.Truncate(t.Price,0) '不? +1在任何情況下,因爲我不知道這種方法。 –

+0

@JonHanna是的,我認爲你是對的。我已經更新了它。謝謝。 –

相關問題