2016-10-10 72 views
0

我有這行代碼翻番轉換:如何INT在LINQ聲明

IEnumerable<double> katlar = ilanlarQuery.ToList() 
             .Select(r => r.BulunduguKat.Value) 
             .OrderBy(f => f); 

我得到的錯誤,因爲BulunduguKat.Value是int,但是katlar加倍。如何在本聲明中將BulunduguKat.Value轉換爲雙倍數?謝謝。

+6

...通過鑄造它? –

+2

附註:刪除「ToList」,如果你不需要它,那麼創建一個新的List效率不高。如果你需要結果列表,最後使用'ToList'。如果'ilanlarQuery'是一個數據庫查詢,並且您希望使用'Linq-To-Objects'來代替使用'AsEnumerable'。 –

+0

@jason鑄就足夠 – Sherlock

回答

8

最直接的方法:只需轉換爲double。這樣,你在告訴TResult型這Select操作的是一個double - 使之成爲一個IEnumerable<double>

IEnumerable<double> katlar = ilanlarQuery.Select(r => (double)r.BulunduguKat.Value) 
             .OrderBy(f => f); 

由於詮釋是隱式可轉換翻番,這將工作太:

IEnumerable<double> katlar = ilanlarQuery.Select<YourType,double>(i => i.BulunduguKat.Value) 
              .OrderBy(f => f)(); 

另外,如您所見,您可以在之前刪除.ToList()

如果確實BulunduguKatNullable<int>如蒂姆建議那麼你應該決定:

//If you don't want them in the result collection: 
var katlar = ilanlarQuery.Where(r => r.BulunduguKat.HasValue) 
          .Select(r => (double)r.BulunduguKat.Value) 
          .OrderBy(f => f) 

//If you want them with some default value: 
var katlar = ilanlarQuery.Select(r => (double)(r.BulunduguKat.HasValue ? r.BulunduguKat.Value : 0)) 
          .OrderBy(f => f); 
+0

第一個答案給出錯誤,第二個答案沒有'BulunduguKat.Value' – jason

+0

@jason - 更正第二個。第一個錯誤是什麼? –

+2

順便說一句,如果這個類型是'Nullable '它可能是'null',那麼這個類型轉換將不會成功,但會給出一個'InvalidOperationException'。例如,您應該處理'!r.BulunduguKat.HasValue'的情況,例如使用條件運算符。 –