我有2个列表,第一个是用Route::get('/subcategory/{category}', 'FrontController@subCategory');
方法填充的字符串列表,第二个是自定义列表。我的自定义列表中只有2个字段。第一个是Directory.GetFiles()
,第二个是FilePath
。
我想要实现的是,我想将字符串列表与自定义列表的UniqueID
字段进行比较。我需要进行更改。
我已将“自定义”列表转换为字符串,并尝试了此解决方案 Difference between two lists 它运行完美,但对我而言对我来说毫无用处。我需要比较不同类型的列表
这是我用作模型的自定义类
FilePath
这就是我已经尝试过的方式
public class IndexerListModel
{
public string FilePath = string.Empty;
public string uniqueID = string.Empty;
}
但是因为我没有在列表中使用相同的类型,所以它不起作用。
我希望能像新列表一样获得与众不同,该新列表向我显示列表中的这些“ x”项具有不同的文件路径。
我的总体目标是在应用程序启动时在Windows文件夹中进行更改。因此,我将知道我的应用程序未启动时已添加/删除/更改/重命名了哪些文件
答案 0 :(得分:2)
如果我正确理解问题,则定制<List<IndexerListModel>
将包含目录Eg C:\Windows
的内容。
然后,在应用程序启动时,我们将使用var myPathList = Directory.GetFiles(@"C:\Windows").ToList();
来检索C:\Windows
的内容。
结果将是自定义<List<IndexerListModel>
如果以上假设正确,我想出了以下解决方案:
public class IndexerListModel
{
public string UniqueID { get; set; }
public string FilePath { get; set; }
}
class Program
{
static void Main(string[] args)
{
var myPathList = Directory.GetFiles(@"C:\Windows").ToList();
List<IndexerListModel> myModelList = new List<IndexerListModel> {
new IndexerListModel {
UniqueID= "0001",
FilePath = @"C:\Windows\bfsvc.exe"
},
new IndexerListModel {
UniqueID= "0002",
FilePath = @"C:\Windows\diagwrn.xml"
}
};
var result = myPathList.Where(path => !myModelList.Any(model => model.FilePath == path)).ToList();
}
}
运行该应用程序时,我的C:\Windows
中总共有27个文件。
-结果将评估为25个项目的清单。这意味着自上次执行以来,总共添加了25个文件。
我们可以更新List myModelList以便反映C:\Windows
中的更改。我可以想象myModelList
被保存在数据库或文件中以便持久化。
答案 1 :(得分:0)
使用左外部联接
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication98
{
class Program
{
static void Main(string[] args)
{
List<string> WinFileList = Directory.GetFiles("AllDirectories[i]", ".", SearchOption.AllDirectories).ToList();
List<IndexerListModel> models = new List<IndexerListModel>();
//use left outer join
var results = (from w in WinFileList
join m in models on w equals m.FilePath into wm
from m in wm.DefaultIfEmpty()
select new { model = m, windFileList = w }).ToList();
}
}
public class IndexerListModel : IEqualityComparer<IndexerListModel>
{
public string FilePath = string.Empty;
public string uniqueID = string.Empty;
}
}
答案 2 :(得分:0)
models.Except(models.Where(y=> strings.Contains(y.FilePath)));