我在使用Linq实体框架方面遇到了麻烦。
这是我的代码:
var activeScoreList = (from s in context.Score
join i in context.Import on s.import.importId equals i.importId
where i.isActive.Value == 1
select s).ToList();
foreach (Score s in activeScoreList)
{
if (s.User.userId == loggedOnUserId) { // Here
...
}
}
我的数据库中有几个Score
个对象,外键UserId
为NOT NULL
。
但是,if
行有总是异常。 User
属性始终为null
。
我是Linq的新手,所以我可能错过了某个配置的东西。这种行为是否正常?我是否必须为每个分数创建一个新查询以获取User
对象?
答案 0 :(得分:2)
编辑 - 您实际上不需要连接语句。您可以像这样重写查询
var activeScoreList = (from s in context.Score.Include("User").Include("Import")
where s.Import.isActive.Value == 1
select s).ToList();
您需要加载用户导航属性。所以在您的foreach声明中,您可以致电
s.UserReference.Load()
如果您在查询中未使用join
语句,则可以使用context.Score.Include("User")
,但由于您使用了join
,因此会忽略所有Include
语句