zoukankan      html  css  js  c++  java
  • 一个蛮复杂的LINQ表达式

    最近写了这么一个方法:

            //返回结果大致为:AAGP30PMDRVS56NK
            public string GetUsbDiskSnViaDriveLetter(string strUsbDiskDriveLetter)
            {
                var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDiskToPartition");
                foreach (ManagementObject dm in searcher.Get())
                {
                    //dm["Dependent"] 大致为:\\JIANG-PC\root\cimv2:Win32_LogicalDisk.DeviceID="H:"
                    string strDriveLetter = getValueInQuotes(dm["Dependent"].ToString());
                    if (strDriveLetter == strUsbDiskDriveLetter)
                    {
                        //dm["Antecedent"] 大致为:\\JIANG-PC\root\cimv2:Win32_DiskPartition.DeviceID="Disk #1, Partition #0"
                        string[] diskArray = getValueInQuotes(dm["Antecedent"].ToString()).Split(',');
                        string driveNumber = diskArray[0].Remove(0, 6).Trim();
                        var disks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
                        foreach (ManagementObject disk in disks.Get())
                        {
                            //disk["Name"] 大致为:\\.\PHYSICALDRIVE1
                            //disk["InterfaceType"] 大致为:USB
                            if (disk["Name"].ToString() == ("\\\\.\\PHYSICALDRIVE" + driveNumber) && disk["InterfaceType"].ToString() == "USB")
                            {
                                //disk["PNPDeviceID"] 大致为:USBSTOR\DISK&VEN_TECLAST&PROD_COOLFLASH(S)&REV_1100\AAGP30PMDRVS56NK&0
                                return parseSerialFromDeviceID(disk["PNPDeviceID"].ToString());
                            }
                        }
                    }
                }
                return null;
            }

    Resharper插件提示我这个可以转变为一个LINQ表达式,我想它会怎么转呢,于是点了一下,就变成了:

            //返回结果大致为:AAGP30PMDRVS56NK
            public string GetUsbDiskSnViaDriveLetter(string strUsbDiskDriveLetter)
            {
                var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDiskToPartition");
                return (from ManagementObject dm in searcher.Get() let strDriveLetter = getValueInQuotes(dm["Dependent"].ToString()) where strDriveLetter == strUsbDiskDriveLetter select getValueInQuotes(dm["Antecedent"].ToString()).Split(',') into diskArray select diskArray[0].Remove(0, 6).Trim() into driveNumber let disks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive") from ManagementObject disk in disks.Get() where disk["Name"].ToString() == ("\\\\.\\PHYSICALDRIVE" + driveNumber) && disk["InterfaceType"].ToString() == "USB" select parseSerialFromDeviceID(disk["PNPDeviceID"].ToString())).FirstOrDefault();
            }

    代码貌似少多了,粗一看还以为这是别的语言,但坦白说可读性真差……长长的一行。

    感觉Resharper也实在太智能了。

  • 相关阅读:
    linux crontab 常用时间设置
    远程连接 mysql 数据库连接不上的解决方案
    Caffe搭建:Ubuntu14.04 + CUDA7.0 + opencv3.0 + Matlab2014A
    Ubuntu中sublime和Foxit Reader不能使用中文输入法解决方案
    python学习:python的星号(*)和双星号(**)用法
    Latex使用:在latex中添加算法模块
    Torch,Tensorflow使用: Ubuntu14.04(x64)+ CUDA8.0 安装 Torch和Tensorflow
    Caffe使用: Ubuntu 14.04(x64) 从cuda 7.0 升级到 cuda8.0
    Git使用:Linux(Ubuntu 14.04 x64)下安装Git并配置连接GitHub
    Git使用:安装,使用及常用命令整理
  • 原文地址:https://www.cnblogs.com/guogangj/p/2862207.html
Copyright © 2011-2022 走看看