C# 无法隐式转换类型';系统Linq.IQueryable<;型号.磁盘使用率>';至';。Model.DiskUsage';
我试图检查数据库中是否已经存在machineName、machineIp和drive的值,以及它们是否存在以更新它们。这就是我现在拥有的: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
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中保存列表。