在 LINQ 表达式中获取对象

本文关键字:获取 取对象 表达式 LINQ | 更新日期: 2023-09-27 18:32:13

那里我想在 LINQ 表达式中获取文件名(我不确定是否可以像这样问)

请查看代码,找到"这里如何在DB中获取文件名???"

public static IEnumerable<string> GetFiles(List<string> srcFiles)
{
    var filePaths = new List<string>();
    using (var db = new ContentMgmtContext())
    {
        foreach (var fileInfo in srcFiles.Select(file => new FileInfo(file)))
        {
            if (db.Files.Any(o => o.FileName.ToLower() == fileInfo.Name.ToLower() || o.FileSize == fileInfo.Length.ToString())) 
            {
                Console.WriteLine("{0} already exist in DB", fileInfo.Name);
                Console.WriteLine("Conflict file in DB is: {0}",HERE HOW TO GET THE FILE'S NAME IN DB???);
            }
            else
            {
                filePaths.Add(fileInfo.FullName);
            }
        }
    }
    return filePaths;
}

在 LINQ 表达式中获取对象

您可以尝试先收集符合您条件的每个数据库条目

public static IEnumerable<string> GetFiles(List<string> srcFiles)
{
    var filePaths = new List<string>();
    using (var db = new ContentMgmtContext())
    {
        foreach (var fileInfo in srcFiles.Select(file => new FileInfo(file)))
        {
            var matches = db.Files.Where(o => o.FileName.ToLower() == fileInfo.Name.ToLower() ||
                o.FileSize == fileInfo.Length.ToString())
            if (matches.Count() > 0)
            {
                foreach (var match in matches)
                {
                    Console.WriteLine("{0} already exist in DB", fileInfo.Name);
                    Console.WriteLine("Conflict file in DB is: {0}",match.FileName);
                }
            }
            else
            {
                filePaths.Add(fileInfo.FullName);
            }
        }
    }
    return filePaths;
}

若要从数据库中保留匹配对象,您需要将 Any 运算符替换为返回匹配项的内容。例如

var match = db.Files.FirstOrDefault(o 
            => o.FileName.ToLower() == fileInfo.Name.ToLower() 
                || o.FileSize == fileInfo.Length.ToString());
if (match != null) {
  // Found...
}