LINQ查询在请求字节时返回null

时间:2013-02-04 16:52:03

标签: c# asp.net-mvc linq

我正在尝试使用MVC制作可下载的曲目。 这是我的代码:

public ActionResult DownloadTrack(int albumid, int trackid)
    {
        var track = (from x in database.songs
                     where x.ALBUM_ID == albumid &&
                     x.TRACK_ID == trackid
                     select x).First();
        Byte[] Song = track.MP3;
        return File(Song, ".mp3", "test");
    }

当代码到达Byte []时,它说track.MP3 = null 但是,当我查询我的数据库时,它说它已被填满......

1 个答案:

答案 0 :(得分:0)

第一个运算符返回序列的第一个元素或与谓词匹配的序列的第一个元素,具体取决于使用的原型。

<强>顺便说一句: 如果任何参数为null,则抛出ArgumentNullException。 如果源序列为空或谓词永远不返回true,则抛出InvalidOperationException。

因此,很可能在where子句中使用的标准不会产生任何结果。

建议如下:

a)如果您使用的是MS SQL Server,请使用SQL事件探查器并确保将正确的SQL应用于数据库(从LINQ生成的SQL)

  • 打开SQL Server Management Studio
  • 转到“工具” - “SQL Server Profiler”
  • 同意打开的“跟踪属性”对话框中的默认值,单击“运行”
  • 运行上面提到的LINQ并调查SQL事件探查器中的SQL语句 (您可以直接将SQL从分析器复制并粘贴到DB中,运行并查看是否 它会产生所需的结果,如果不能修改LINQ)。

b)建议使用FirstOrDefault,并处理返回的null