我在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#中对此函数进行不必要的多次调用?
答案 0 :(得分:2)
您可以使用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();
答案 1 :(得分:2)
这已经得到了回答,但是在不使用let关键字的情况下链接语法也是如此。
我想把它扔到那里只是为了告诉你如何在你使用链式linq调用时“只允许使用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();
答案 2 :(得分:1)
from xxx
let tempValue = Helper.GetListValue(device.List)
select xxx