c# - Linq 查询语法与方法链 : return type

标签 c# linq

阅读 herehere ,我知道查询语法和方法扩展在很大程度上是语法上的差异。但是现在,我有一个包含测量数据的数据结构并且想要确定百分位数。我写:

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);

一切正常。 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);

现在,ds 的类型是 System.Linq.Enumerable.WhereSelectEnumerableIterator<Dataset.DeviceData,double>百分位数函数调用失败。

还不确定我在这里遗漏了什么...... - 没有特别的理由为什么我更喜欢第二种语法,但我想了解其中的区别......谢谢你的帮助!

最佳答案

from device in dataSet.devices
where !device.paramValues[i].Equals(double.NaN)
select device.paramValues[i]

转化为方法如下:

dataSet.devices
       .Where(device => !device.paramValues[i].Equals(double.NaN))
       .Select(device => device.paramValues[i]);

添加你的 OrderBy 调用你得到

dataSet.devices
       .Where(device => !device.paramValues[i].Equals(double.NaN))
       .Select(device => device.paramValues[i])
       .OrderBy(val => val);

其他查询

from device in dataSet.devices
where !device.paramValues[i].Equals(double.NaN)
orderby device.paramValues[i]
select device.paramValues[i];

转化为

dataSet.devices
       .Where(device => !device.paramValues[i].Equals(double.NaN))
       .OrderBy(device => device.paramValues[i])
       .Select(device => device.paramValues[i]);

如您所见,这并不是完全相同的方法链,这是因为您得到了不同的对象。内容相同,但返回的类型不同。

关于c# - Linq 查询语法与方法链 : return type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20906238/

相关文章:

c# - 从文件中检索字符串,当多行包含完全相同的字符串时使用 Linq 进行过滤

c# - 从子 ViewModel 到父 ViewModel 的属性返回值

c# - 在 MembershipUserCollection 上使用 Linq

.net - 根据关联值过滤 EntityDataSource

c# - 集成第三方api或服务的最佳设计模式

c# - C# 中 MySQL 二进制文件 (16) 的替代方案

c# - 缩小字符串 C#

c# - 如何使用 LinQ 获取 IQueryable() 而不是 List()?

Asp.NET MVC3 + MySQL,总是返回 null

c# - 可以在没有 Linq 的情况下使用 lambda 吗?