2016-10-10 71 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'的情况,例如使用条件运算符。 –