C# 获取LINQ表达式中的对象

C# 获取LINQ表达式中的对象,c#,linq,C#,Linq,那里 我想得到文件名,在LINQ表达式中,我不确定是否可以这样问 请看代码,在这里找到如何在DB中获取文件名 您可以先尝试收集符合条件的每个db条目 public static IEnumerable<string> GetFiles(List<string> srcFiles) { var filePaths = new List<string>(); using (var db = new ContentMgmtContext())

那里 我想得到文件名,在LINQ表达式中,我不确定是否可以这样问

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


您可以先尝试收集符合条件的每个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)))
        {
            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...
}

您正在尝试将新内容保存到数据库中吗?如果是这样,您需要将对象添加到数据库集中,然后告诉上下文保存更改。那么大小相同的文件被视为相等吗?@Richard这里我不想将任何信息保存到数据库中,但只需将一些文件的信息与数据库中的文件进行比较,如果文件的大小或名称相同,则它们被视为相等。我的问题是当文件相等时如何获取o.FileName。
var match = db.Files.FirstOrDefault(o 
            => o.FileName.ToLower() == fileInfo.Name.ToLower() 
                || o.FileSize == fileInfo.Length.ToString());
if (match != null) {
  // Found...
}