有 我想在LINQ Expression中获取文件名(我不确定是否可以这样问)
请查看代码,找到“这里如何在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;
}
答案 0 :(得分:3)
您可以尝试收集符合条件的每个数据库条目
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;
}
答案 1 :(得分:1)
要保留数据库中的匹配对象,您需要使用返回匹配项的内容替换Any
运算符。例如
var match = db.Files.FirstOrDefault(o
=> o.FileName.ToLower() == fileInfo.Name.ToLower()
|| o.FileSize == fileInfo.Length.ToString());
if (match != null) {
// Found...
}