在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# ?

在Linq中只调用一次常用方法

您可以使用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