无效的参数

时间:2012-11-12 05:12:26

标签: asp.net linq

从数据库中检索文件我使用下面的linq查询来下载efile,但我在函数下载(Efile)中有问题无效参数。 我见过一些使用数据表下载的地方。我喜欢这样做而不使用数据表,但我不知道如何?

the fields of table tblfile is like below.

fileid(int), FileName (varchar(50)), ContentType (varchar(50)), Data varbinary(MAX)

请帮助解决问题。

protected void LinkButton1_Command(object sender, CommandEventArgs e)
{
    if (e.CommandName == "Download")
    {
       _DataContext = new EDMSDataContext();
       //you can get your command argument values as follows
       string FileId = e.CommandArgument.ToString();
       int _FileId = Convert.ToInt32(FileId);
       var Efile = from ef in _DataContext.tblFiles
                   where ef.FileId == _FileId
                   select ef;
       if (Efile != null)
       {
           download(Efile);
       }
    }
}

private void download ( tblFile Efile)
{
    Byte[] bytes = (Byte[])Efile.Data.ToArray();
    Response.Buffer = true;
    Response.Charset = "";
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.ContentType = Efile.ContentType.ToString();
    Response.AddHeader("content-disposition", "attachment;filename="
        + Efile.FileName.ToString());
    Response.BinaryWrite(bytes);
    Response.Flush();
    Response.End();
}

2 个答案:

答案 0 :(得分:0)

该方法接受“tblFile”对象的参数,并且您正在传递该集合。将Single()添加到linq查询表达式,然后解析。

   var Efile = (from ef in _DataContext.tblFiles
               where ef.FileId == _FileId
               select ef).Single();

或者,您也可以使用First()FirstOrDefault()SingleOrDefault()

答案 1 :(得分:0)

确保您的.dbml文件具有表格 tblfile 的属性,如您所愿并且如您所述。并使用下面的代码重试数据库中的数据。

tblFile data = _DataContext.tblFile.SingleOrDefault(s=>s.fileid  ==  _FileId);

这将按您的意愿工作。