我正在尝试在lambda查询中放入条件表达式,如下所示

GetPeers(bool? isConnected = true)
{
    dbContext
    .peers
    .Where(m => isConnected.HasValue ? m.IsConnected == isConnected.Value : true)
    .ToList();
}


上面的陈述给了我Nullable object must have a value.例外。

我不明白!我的查询有什么问题?

我想要的如果isConnected为null,那么它应该基于m.IsConnected == isConnected.Value返回所有记录,否则

最佳答案

这是实体框架如何转换三元表达式的问题,它试图使用isConnected.Value的结果创建SQL参数,但isConnected为null,因此抛出该异常。

我的首选选项是仅在确实存在要应用的谓词的情况下才应用谓词:

IQueryable<Peer> peers = dbContext.peers;
if(isConnected.HasValue)
{
    var isConnectedValue = isConnected.Value;
    peers = peers.Where(m => m.IsConnected == isConnectedValue);
}
return peers.ToList();

关于c# - Lambda表达式C#中的三元运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35000415/

10-12 16:05