如何在LINQ语句中将int转换为double

jas*_*son 2 c# linq

我有这行代码:

IEnumerable<double> katlar = ilanlarQuery.ToList()
                                         .Select(r => r.BulunduguKat.Value)
                                         .OrderBy(f => f);
Run Code Online (Sandbox Code Playgroud)

我得到错误因为BulunduguKat.Value是int,但是katlar是双倍的.如何BulunduguKat.Value在此声明中转换为double?谢谢.

Gil*_*een 9

最直接的方式:只需转换为double.通过这样做,你告诉TResult这个Select操作的类型是double- 使这个IEnumerable<double>

IEnumerable<double> katlar = ilanlarQuery.Select(r => (double)r.BulunduguKat.Value)
                                         .OrderBy(f => f);
Run Code Online (Sandbox Code Playgroud)

由于int可以隐式转换为double,因此也可以使用:

IEnumerable<double> katlar  = ilanlarQuery.Select<YourType,double>(i => i.BulunduguKat.Value)
                                          .OrderBy(f => f)();
Run Code Online (Sandbox Code Playgroud)

此外,如您所见,您可以删除.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);
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,如果类型是一个`Nullable <int>`它可能是`null`,那么转换将不会成功,但会给出一个`InvalidOperationException`.你应该处理`!r.BulunduguKat.HasValue`的情况,例如使用条件运算符. (2认同)