C# 是一种表示(文件“存在于db’{}???中的方式?

C# 是一种表示(文件“存在于db’{}???中的方式?,c#,sqlite,C#,Sqlite,为什么不在处理完文件后将其移动到另一个文件夹中呢 编辑:更新后的代码会起作用,但随着目录的填充,运行时间会越来越长,因为您正在查询数据库中目录中的每个文件。如果可以将数据库中导入的文件列表检索到列表中,则可以使用linq执行以下操作: List<string> ImportedFiles = GetImportedFileList() // Method that gets the list of files from the db foreach (string file in f

为什么不在处理完文件后将其移动到另一个文件夹中呢

编辑:更新后的代码会起作用,但随着目录的填充,运行时间会越来越长,因为您正在查询数据库中目录中的每个文件。如果可以将数据库中导入的文件列表检索到
列表中
,则可以使用linq执行以下操作:

List<string> ImportedFiles = GetImportedFileList() // Method that gets the list of files from the db
foreach (string file in files.Where(fl => !ImportedFiles.Contains(fl)))
List ImportedFiles=GetImportedFileList()//从数据库获取文件列表的方法
foreach(files.Where(fl=>!ImportedFiles.Contains(fl))中的字符串文件)
这意味着您的foreach循环将只遍历数据库中尚未存在的文件


我假设您知道如何编写一个方法
GetImportedFileList()
,该方法从数据库获取文件列表,并将其作为
列表返回

使文件名列唯一或为其添加唯一索引,然后执行插入或忽略操作,从而在不引发异常的情况下忽略重复项。

您可以将文件名从数据库加载到字符串列表中,然后使用
Except
扩展名方法从目录返回的文件名中排除这些文件

foreach (string file in directoryFilenames.Except(databaseFilenames))
{
   // do something
}

Ben Robinson提供了一个类似的答案,但是使用
Where
Contains
将对第一个列表中的每个项目在第二个列表中进行迭代。
Except
方法只会在第二个列表上迭代一次。

这就是问题所在。。由于各种原因,许多人使用它们。位置需要保持不变。我只需要说,“好的,这已经被添加了,现在跳过它并继续下一个文件”使用FileSystemWatcher在添加文件时发布事件以绕过“越来越长”的部分。好的,我有一个公共静态void(???)设置的方法,foreach已经就位,但是我得到了以下错误。。。找不到类型或命名空间名称“List”(是否缺少引用?)。“string[]”不包含“Where”的定义,并且找不到“Where”的扩展名menthod,“Where”接受类型为“string[]”的第一个参数。无法将类型void隐式转换为list这很有趣。。如何查询sqlite数据库以返回给定列的所有唯一值(例如,列文件名中的所有不同文件名)?如果我知道这一点,我将尝试创建一个列表字符串,并使用Except方法。。提前感谢。请从tablename中选择不同的fieldname
foreach (string file in directoryFilenames.Except(databaseFilenames))
{
   // do something
}