我正在尝试仅从某个用户显示来自数据库的文件,我有点担心如何从数据库中过滤文件。查看它的罚款,如果我将Viewbag
与string[] 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();
}
谢谢!
答案 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();