【发布时间】:2015-05-01 20:44:44
【问题描述】:
我在尝试运行以下查询时收到 NullReferenceException:
var questions = db.questions
.Where(t => Ids.Contains(t.id));
foreach (var q in questions) // exception
{
var a = q.id;
}
foreach 语句中出现异常。
在数据库中,我有一个 questions 表,其中有一条 Id = 1 的记录。
如果我使用t => t.id == 1 查询,我会得到结果。
ID 是 List<long> 类型。运行代码时,Ids变量包含一项,即值为1。
我的目标是检索 id(主键)等于 Ids 列表中的一个或多个 Id 的问题。
例如:如果列表包含数字 1、3、5,则查询应返回问题表中与具有相应 ID 的记录匹配的行,即 1,3 和 5。
在 MySQL 中使用 Entity Framework 6。
【问题讨论】:
-
在此处之后调用 .ToList() 会发生什么:.Where(t => Ids.Contains(t.id));,如 .Where(t => Ids.Contains(t. id)).ToList();
-
您的
db或questions变量为空。你调试过你的代码吗? -
@GrantWinney 当我使用 toList 时,我仍然得到同样的异常。我正在调试代码。
-
@IdanShechter 尝试
db.questions.ToList().Where(t => Ids.Contains(t.id))只是为了测试。我认为错误会消失。 -
@IdanShechter 我知道它会起作用,但它会在从 db 获取记录后应用过滤器,而不是我们应该找到一些方法在 sql 本身中过滤它。只需要很少的记录,为什么要获取所有记录?
标签: c# sql asp.net linq entity-framework