在这里和这里阅读,我理解查询语法和方法扩展几乎是一种语法差异.但现在,我有一个包含测量数据的数据结构,并希望确定百分位数.我写:
var ds = (from device in dataSet.devices
where !device.paramValues[i].Equals(double.NaN)
select device.paramValues[i]).OrderBy(val => val);
double median = percentile(ds as IOrderedEnumerable<double>, 0.5);
Run Code Online (Sandbox Code Playgroud)
一切正常.ds是类型的System.Linq.OrderedEnumerable<double,double>
令我困惑的是用查询语法编写整个内容:
var ds = (from device in dataSet.devices
where !device.paramValues[i].Equals(double.NaN)
orderby device.paramValues[i]
select device.paramValues[i]);
double median = percentile(ds as IOrderedEnumerable<double>, 0.5);
Run Code Online (Sandbox Code Playgroud)
现在,ds是类型,System.Linq.Enumerable.WhereSelectEnumerableIterator<Dataset.DeviceData,double>
并且对百分位函数的调用失败.
还不确定我在这里缺少什么... - 没有特别的理由为什么我更喜欢第二种语法,但我想了解其中的差异......感谢您的帮助!
from device in dataSet.devices
where !device.paramValues[i].Equals(double.NaN)
select device.paramValues[i]
Run Code Online (Sandbox Code Playgroud)
转化为如下方法:
dataSet.devices
.Where(device => !device.paramValues[i].Equals(double.NaN))
.Select(device => device.paramValues[i]);
Run Code Online (Sandbox Code Playgroud)
添加你的OrderBy
电话
dataSet.devices
.Where(device => !device.paramValues[i].Equals(double.NaN))
.Select(device => device.paramValues[i])
.OrderBy(val => val);
Run Code Online (Sandbox Code Playgroud)
另一个查询
from device in dataSet.devices
where !device.paramValues[i].Equals(double.NaN)
orderby device.paramValues[i]
select device.paramValues[i];
Run Code Online (Sandbox Code Playgroud)
变成了
dataSet.devices
.Where(device => !device.paramValues[i].Equals(double.NaN))
.OrderBy(device => device.paramValues[i])
.Select(device => device.paramValues[i]);
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它不是完全相同的方法链,那是因为您获得了不同的对象.内容是相同的,但返回的类型不是.
归档时间: |
|
查看次数: |
238 次 |
最近记录: |