因为我可以在LINQ的where子句中调用一个方法,或者我如何添加条件来仅显示现有文件?
目标:显示服务器上存在的文档列表
查询:
var query = from d in dtContext.documents
where FileExists(d.Id, d.Path) == true
select d;
方法:
Private bool FileExists (int ID, string Path)
{
if(File. Exists(Server.MapPath(Path))
return true
else
{
using (Model.DataContext dt = new Model.DataContext())
{
var vDoc = dt.Documents.Where(x => x.DocumentId == ID).FirstOrDefault();
vDoc.Status = false;
dt.SubmitChanges();
}
return false;
}
}
答案 0 :(得分:3)
您无法在无法映射到提供程序函数的位置调用方法(即SQL Server是否可以执行该函数?)。
您需要将所有文档提取到内存中。如果可能,请限制列以限制内存使用量。
// fetch all documents as an enumerable sequence
var documents = dtContext.Documents.AsEnumerable();
return documents.Where(d => FileExists(d.Id, d.Path));
或者,如果您知道文件所在的位置,则可以扫描文件系统以获取所有存在的文件的列表,并将其传递给您查询。
string[] filePaths = ....
var documents = dtContext.Documents.Where(d => filePaths.Contains(d.Path));