2015-04-02 70 views
0

我試圖從我的類QCA中選擇Sales的值。我正在使用linq查詢QCA的集合。我想按日期最近一次當我嘗試此代碼時,我得到錯誤告訴我它不能將IEnumerable轉換爲十進制。 我哪裏錯了?使用Linq轉換爲十進制

SalesTotal = (from q in QuickCreditAssessments orderby q.FinancialsDate ascending 
           select q.Sales).Skip(1).Take(1); 

回答

6

如果你想要一個不使用TakeFirst/FirstOrDefault/Single/SingleOrDefault

decimal salesTotal = (from q in QuickCreditAssessments 
         orderby q.FinancialsDate ascending 
         select q.Sales) 
    .Skip(1) // now you get the second to last by Date 
    .FirstOrDefault(); 

順便說一句,如果你想在「按日期最近的一個」你應該使用descending

+0

......大概沒有使用'.Skip(1)'因爲這將意味着他們得到的第二個可用。 – 2015-04-02 14:07:42

+0

@JonHanna:你說得對,我在Skip上添加了一條評論,也許OP希望第二個持續。同樣值得注意的是,如果沒有或只有一個記錄,他也不會得到任何記錄。 'FirstOrDefault'表示'0',因爲這是'decimal'的默認值。 – 2015-04-02 14:12:53

+0

@Jon Hanna。謝謝。這工作正好。另外,降序也是我需要的。這就像你閱讀我的想法。 :) – 2015-04-02 14:31:53

2

Take回報IEnumerable<T>,而不是在你的情況採取我會用FirstOrDefault(),像這樣:

SalesTotal = (from q in QuickCreditAssessments orderby q.FinancialsDate ascending 
           select q.Sales).Skip(1).FirstOrDefault();