1

因为我可以在 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;
    }
}
4

1 回答 1

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));
于 2012-08-13T16:43:03.807 回答