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

标签 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[] Song 时,它说 track.MP3 = null 但是当我查询我的数据库时,它说它已满......

最佳答案

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

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

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

建议如下:

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

  • 打开 SQL Server Management Studio
  • 转到工具 – SQL Server Profiler
  • 同意打开的 Trace Properties 对话框中的默认值,点击“运行”
  • 运行上述 LINQ 并在 SQL Profiler 中调查 SQL 语句 (你可以直接将分析器中的 SQL 复制并粘贴到数据库中,运行并查看是否 它是否产生所需的结果,如果没有,请修改 LINQ)。

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

关于c# - LINQ 查询在请求字节时返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14691432/

相关文章:

c# - 何时使用 LINQ 的 .ToList() 或 .ToArray()

c# - 过滤导航属性 EF core

c# - ArrayList 过滤逻辑

c# - 在 C# 中转换为派生类和垃圾回收

c# - 我可以编写一个程序来将 Internet 使用量限制为每天 40mb 吗?

asp.net-mvc - 主从 View ASP.NET MVC

c# - 字符串枚举值已修改

c# - “System.Data.Entity.ModelConfiguration.ModelValidationException”出现在 EntityFramework.dll 中,但未在用户代码中处理

c# 到 json 无法在 View 中正确呈现

c# - 如何使用 Lambda/LINQ 从字典中启动一个类对象,由 Newtonsoft.Json 解析?