非静态方法在检查空值参数时需要一个目标
Non-static method requires a target when checking paramater for null values
在下面的代码中,如果我取消注释以 queItem.RequestedMap == null
开头的行,我会得到
Non-static method requires a target.
如果我然后改为使用 .ToList()
重写它,然后在它工作之后执行相同的 where 查询。这告诉我 .net 无法将 queItem.RequestedMap == null
的空检查转换为特定的 sql。
queItem
是传递给包含此代码的方法的对象参数。
有没有一种方法可以在不将数据检索回 .net 的情况下编写此代码,然后在何处执行其他操作?我找到的现有答案只是说要从 lambda 查询中删除此类表达式,我不想这样做。
var gameToJoin = db.Games
//.Where(x =>
// (queItem.RequestedMap == null || x.Map.Id == queItem.RequestedMap.Id) // no map preference or same map
//)
.ToList()
.Where(x =>
queItem.RequestedMap == null
|| x.Map.Id == queItem.RequestedMap.Id) // no map preference or same map)
.FirstOrDefault();
编辑:另外,在真正的查询表达式中,这里注释的第一个.Where
中还有多个其他表达式,它们总是需要检查。
这不是你想要的吗?我看不出 queItem.RequestedMap
检查应该是 LINQ 的一部分的原因,因为它不是数据库的一部分。
Game gameToJoin = null;
if(queItem.RequestedMap == null)
{
gameToJoin = db.Games
.Where(x => x.Map.Id == queItem.RequestedMap.Id)
.FirstOrDefault;
}
var gameToJoin = db.Games.AsQueryable();
// add the where's that always need to be checked.
if (queItem.RequestMap != null)
{
gameToJoin = gameToJoin.Where(x => x.Map.Id = queItem.RequestMap.Id);
}
var result = gameToJoin.ToList();
或者如果您更愿意使用 FirstOrDefault()
var gameToJoin = db.Games.AsQueryable();
// add the where's that always need to be checked.
if (queItem.RequestMap != null)
{
var result = new List<Game>();
var game = gameToJoin.FirstOrDefault(x => x.Map.Id = queItem.RequestMap.Id);
if (game != null)
{
result.Add(game);
}
return result;
}
return gameToJoin.ToList();
在下面的代码中,如果我取消注释以 queItem.RequestedMap == null
开头的行,我会得到
Non-static method requires a target.
如果我然后改为使用 .ToList()
重写它,然后在它工作之后执行相同的 where 查询。这告诉我 .net 无法将 queItem.RequestedMap == null
的空检查转换为特定的 sql。
queItem
是传递给包含此代码的方法的对象参数。
有没有一种方法可以在不将数据检索回 .net 的情况下编写此代码,然后在何处执行其他操作?我找到的现有答案只是说要从 lambda 查询中删除此类表达式,我不想这样做。
var gameToJoin = db.Games
//.Where(x =>
// (queItem.RequestedMap == null || x.Map.Id == queItem.RequestedMap.Id) // no map preference or same map
//)
.ToList()
.Where(x =>
queItem.RequestedMap == null
|| x.Map.Id == queItem.RequestedMap.Id) // no map preference or same map)
.FirstOrDefault();
编辑:另外,在真正的查询表达式中,这里注释的第一个.Where
中还有多个其他表达式,它们总是需要检查。
这不是你想要的吗?我看不出 queItem.RequestedMap
检查应该是 LINQ 的一部分的原因,因为它不是数据库的一部分。
Game gameToJoin = null;
if(queItem.RequestedMap == null)
{
gameToJoin = db.Games
.Where(x => x.Map.Id == queItem.RequestedMap.Id)
.FirstOrDefault;
}
var gameToJoin = db.Games.AsQueryable();
// add the where's that always need to be checked.
if (queItem.RequestMap != null)
{
gameToJoin = gameToJoin.Where(x => x.Map.Id = queItem.RequestMap.Id);
}
var result = gameToJoin.ToList();
或者如果您更愿意使用 FirstOrDefault()
var gameToJoin = db.Games.AsQueryable();
// add the where's that always need to be checked.
if (queItem.RequestMap != null)
{
var result = new List<Game>();
var game = gameToJoin.FirstOrDefault(x => x.Map.Id = queItem.RequestMap.Id);
if (game != null)
{
result.Add(game);
}
return result;
}
return gameToJoin.ToList();