Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法隐式转换类型';系统Linq.IQueryable<;型号.磁盘使用率>';至';。Model.DiskUsage';_C#_Asp.net - Fatal编程技术网

C# 无法隐式转换类型';系统Linq.IQueryable<;型号.磁盘使用率>';至';。Model.DiskUsage';

C# 无法隐式转换类型';系统Linq.IQueryable<;型号.磁盘使用率>';至';。Model.DiskUsage';,c#,asp.net,C#,Asp.net,我试图检查数据库中是否已经存在machineName、machineIp和drive的值,以及它们是否存在以更新它们。这就是我现在拥有的: DiskUsage editTest = _dbContext.Disk_Usage.Where(du => du.id != diskUsage.id && du.machineName == diskUsage.machine

我试图检查数据库中是否已经存在machineName、machineIp和drive的值,以及它们是否存在以更新它们。这就是我现在拥有的:

                          DiskUsage editTest = _dbContext.Disk_Usage.Where(du => du.id != 
                           diskUsage.id && du.machineName == diskUsage.machineName && du.machineIp == 
                            diskUsage.machineIp && diskUsage.drive == diskUsage.drive);

                  //  if (_dbContext.Disk_Usage.Contains(diskUsage.machineIp)
                          {
                         editTest.id = diskUsage.id;
                        editTest.machineName = diskUsage.machineName;
                        editTest.machineIp = diskUsage.machineIp;
                        editTest.drive = diskUsage.drive;
                        editTest.sizeGB = diskUsage.sizeGB;
                        editTest.freeSpaceGB = diskUsage.freeSpaceGB;
                        editTest.freeSpaceProc = diskUsage.freeSpaceProc;
                        editTest.fileSystem = diskUsage.fileSystem;

                        _dbContext.Update(editTest);
                        _dbContext.SaveChanges();
                    }

通过这段代码,我得到了“无法将类型“System.Linq.IQueryable”隐式转换为“.Model.DiskUsage”。存在显式转换(是否缺少强制转换?”。我已尝试添加FirstOrDefault(),但它只更新数据库的第一行。如何检查所有行的值并在它们不同时更新它们?

上述Linq中的
,其中
返回的是IQueryable,而不是实际的结果集。 您需要向它添加一个
.ToList()
,以获得结果,然后可以在循环或您选择的迭代器中更新这些结果

 DiskUsage editTest = _dbContext.Disk_Usage.Where(du => 
                        du.id != diskUsage.id 
                        && du.machineName == diskUsage.machineName 
                        && du.machineIp == diskUsage.machineIp 
                        && diskUsage.drive == diskUsage.drive).ToList();

您需要一个foreach循环来迭代记录并逐个更新()它们。您不需要调用list(),枚举IQueryable将执行查询并具体化结果。您也不能在t中保存列表。