链式 IEnumerable 的方法 Where 和 Select 是否比单独执行它们慢?
Are chained IEnumerable's methods Where and Select slower than doing them separately?
我有一些带有以下调用的继承代码:
第一个:
var pasajesDelServicio = venta.Pasajes.Where(p =>
p.ServicioPasaje.ClaveSolicitud == servicio.RequestKey &&
p.ServicioPasaje.IndiceServicio == servicio.ServiceIndex);
然后:
DatosPasajeros = pasajesDelServicio.ToList().Select(p => {
p.Pasajero.TipoDePasajero = (Dominio.Entidades.Cliente.TipoDePasajero) solicitudVennta.IdTipoPasajero;
return new DatosPasajeroCompra
{
Butaca = p.NumeroAsiento,
Pasajero = p.Pasajero,
IdVentaDetalle = p.IdVentaDetalle,
SubeEn = p.SubeEn,
MenuABordo = p.MenuABordo?.Id,
Precio = p.PrecioBruto
};
})
将 Where 和 Select 调用链接起来会不会更有效率?像这样:
DatosPasajeros = venta.Pasajes.Where(p =>
p.ServicioPasaje.ClaveSolicitud == servicio.RequestKey &&
p.ServicioPasaje.IndiceServicio == servicio.ServiceIndex)
.ToList()
.Select(p => {
p.Pasajero.TipoDePasajero = (Dominio.Entidades.Cliente.TipoDePasajero) solicitudVennta.IdTipoPasajero;
return new DatosPasajeroCompra
{
Butaca = p.NumeroAsiento,
Pasajero = p.Pasajero,
IdVentaDetalle = p.IdVentaDetalle,
SubeEn = p.SubeEn,
MenuABordo = p.MenuABordo?.Id,
Precio = p.PrecioBruto
};
})
我试过阅读一些文档,但找不到我的答案。我真的是 C# 新手。
链接本身不会为您节省很多处理,因为在任何一种情况下都将执行完全相同的代码。但是,由于您有一个 pasajesDelServicio
和一个 DatosPasajeros
变量,您可以通过仅使用一个变量来节省一些内存。此外,您可以通过在 Select
之后移动 ToList()
调用来提高效率,只返回数据的一个子集而不是整个实体(并在之后进行过滤)。
HTH
函数链接编译与单独调用函数相同。如果您看一下 IEnuerableExtensions
的接口,您会发现它只是一个采用 this IEnumerable source
的扩展方法。 C# 扩展方法只是语法糖,编译时就好像函数是单独调用的一样。正如其他人所提到的,最好不要在你的情况下调用 .ToList<T>()
,因为它是一种浪费。
我有一些带有以下调用的继承代码:
第一个:
var pasajesDelServicio = venta.Pasajes.Where(p =>
p.ServicioPasaje.ClaveSolicitud == servicio.RequestKey &&
p.ServicioPasaje.IndiceServicio == servicio.ServiceIndex);
然后:
DatosPasajeros = pasajesDelServicio.ToList().Select(p => {
p.Pasajero.TipoDePasajero = (Dominio.Entidades.Cliente.TipoDePasajero) solicitudVennta.IdTipoPasajero;
return new DatosPasajeroCompra
{
Butaca = p.NumeroAsiento,
Pasajero = p.Pasajero,
IdVentaDetalle = p.IdVentaDetalle,
SubeEn = p.SubeEn,
MenuABordo = p.MenuABordo?.Id,
Precio = p.PrecioBruto
};
})
将 Where 和 Select 调用链接起来会不会更有效率?像这样:
DatosPasajeros = venta.Pasajes.Where(p =>
p.ServicioPasaje.ClaveSolicitud == servicio.RequestKey &&
p.ServicioPasaje.IndiceServicio == servicio.ServiceIndex)
.ToList()
.Select(p => {
p.Pasajero.TipoDePasajero = (Dominio.Entidades.Cliente.TipoDePasajero) solicitudVennta.IdTipoPasajero;
return new DatosPasajeroCompra
{
Butaca = p.NumeroAsiento,
Pasajero = p.Pasajero,
IdVentaDetalle = p.IdVentaDetalle,
SubeEn = p.SubeEn,
MenuABordo = p.MenuABordo?.Id,
Precio = p.PrecioBruto
};
})
我试过阅读一些文档,但找不到我的答案。我真的是 C# 新手。
链接本身不会为您节省很多处理,因为在任何一种情况下都将执行完全相同的代码。但是,由于您有一个 pasajesDelServicio
和一个 DatosPasajeros
变量,您可以通过仅使用一个变量来节省一些内存。此外,您可以通过在 Select
之后移动 ToList()
调用来提高效率,只返回数据的一个子集而不是整个实体(并在之后进行过滤)。
HTH
函数链接编译与单独调用函数相同。如果您看一下 IEnuerableExtensions
的接口,您会发现它只是一个采用 this IEnumerable source
的扩展方法。 C# 扩展方法只是语法糖,编译时就好像函数是单独调用的一样。正如其他人所提到的,最好不要在你的情况下调用 .ToList<T>()
,因为它是一种浪费。