在Linq中只调用一次常用方法
本文关键字:一次 常用 方法 Linq 调用 | 更新日期: 2023-09-27 18:10:58
我已经在ASP.net MVC应用程序返回我的设备计数的现有代码如下所示:
return (from device in mynetwork.Devices where Helper.IsDevAvailable(device.id) != true
select new DeviceInfo
{
id = device.DeviceId,
name = BuildDeviceName(device),
make = Helper.GetListValue(device.List).Contains('_') ? (Helper.GetListValue(device.List).Split('_')[1] == Type.Unknown.ToString() ? "NA" : Helper.GetListValue(device.List).Split('_')[1]) : "NA"
}).Count();
这里,GetListValue是一个函数,由于它在上面代码中编写的方式而被多次调用。
我是。net新手&想知道是否有一种方法来调用这个GetListValue只是一次&以某种方式修改上述代码以提高性能&从而避免不必要的多次调用这个函数在c# ?
您可以使用let
关键字
return (from device in mynetwork.Devices
where Helper.IsDevAvailable(device.id) != true
let listValue = Helper.GetListValue(device.List)
^^^^^^^^^^^^^
select new DeviceInfo
{
id = device.DeviceId,
name = BuildDeviceName(device),
make = listValue.Contains('_') ? (listValue.Split('_')[1] == Type.Unknown.ToString() ? "NA" : listValue.Split('_')[1]) : "NA"
}).Count();
这个问题已经得到了答案,但是这里没有使用let关键字的链式语法也是一样的。
我想把这个放在那里只是为了告诉你当你使用链式linq调用"as let只适用于linq查询语法"时如何做到这一点。
mynetwork.Devices.Where(device => !Helper.IsDevAvailable(device)).Select(device =>
{
var listValue = Helper.GetListValue(device.List);
return new DeviceInfo()
{
id = device.deviceId,
name = BuildDeviceName(device),
make = listValue.Contains('_') ? (listValue.Split('_')[1] == Type.Unknown.ToString() ? "NA" : listValue.Split('_')[1]) : "NA"
};
}).Count();
Try let clause
from xxx
let tempValue = Helper.GetListValue(device.List)
select xxx