MVC按ID从数据库中过滤文件

时间:2017-01-04 17:05:25

标签: asp.net-mvc linq file downloadfile

我正在尝试仅从某个用户显示来自数据库的文件,我有点担心如何从数据库中过滤文件。查看它的罚款,如果我将Viewbagstring[] files变量绑定,则会显示所有这些变量。

    public ActionResult DownloadPDF(string id)
    {
        var fileID = (from c in db.Files where c.UserID == id select c);

        string[] files = Directory.GetFiles(Server.MapPath("~/FilesDB/PDF"));
        for (int i = 0; i < files.Length; i++)
        {            
            files[i] = Path.GetFileName(files[i]);
        }

        var specificFile = files.SingleOrDefault(x => x.Equals(fileID));

        ViewBag.Files = specificFile;
        return View();
    }

谢谢!

1 个答案:

答案 0 :(得分:2)

关于通话files.SingleOrDefault(x => x.Equals(fileID))

  • files 的类型为string[]
  • 这会使每个 x 成为string
  • fileID 是Linq查询的结果,例如IQueryable<SomeType>。所以甚至没有一个SomeType对象,而是一个可以返回SomeType对象集合的对象。
  • x fileID 类型完全不同,x.Equals(fileID)无法成真。

如果您可以通过将Linq查询更改为以下内容将fileID更改为单个字符串,它可能会开始工作:

string fileID = (
    from   c in db.Files
    where  c.UserID == id
    select c.FileID.ToString()
    ).FirstOrDefault();