以下函数导致NullReferenceException,因为它引用了m.tags
,它尚未在JSON对象中声明。这是故意的。我需要查询没有现有tags
对象的所有JSON对象。
SelectNext
TweetModel tweet = client
.CreateDocumentQuery<TweetModel>( UriFactory.CreateDocumentCollectionUri( databaseName, collectionName), queryOptions )
.Where( m => m.tags == null )
.ToList()
.FirstOrDefault();
示例文档
{
"timestamp": "2017-07-05T19:31:18.918Z",
"topic": "Trump",
"score": "1",
"sentiment": "positive",
"text": "@gjacquette @travi44 @WSJ Where did I say trump shouldn't hire a lawyer? I said the fact his lawyers are hiring law… ",
"id": "882683325495816192",
"retweet_count": 0,
"time_zone": null,
"lang": "en",
"screen_name": "bernielove1969"
}
声明tags
对象的空值可以解决异常,所以我确定这是问题,我只是不确定如何解决它。
在过去几个小时内,我尝试将m => m.tags == null
修改为!(m => m.tags != null)
但没有运气以及各种其他解决方案。欢迎提出建议。
答案 0 :(得分:4)
改变这个:
.Where(m => m.tags == null)
到此:
.Where(m => m?.tags == null)
使用Null-conditional Operator,如果NullReferenceException
没有引用某个对象,则不会点击m
。
<强>更新强>
处理IQueryable<T>
查询时,lambda表达式转换为表达式树,表达式树不支持null条件运算符。因此,您可以改为.Where(m => m != null && m.tags == null)
。
答案 1 :(得分:0)
在黑暗中这是一个小小的镜头,但我想我会把它丢掉以防它有所帮助。听起来这不是m.tag为null的问题,但是m是动态创建的对象,可能根本没有tag属性。它并不是null / not-null,它甚至可能不在对象中作为属性或字段。
你有没有尝试过像这样的东西:
m.GetType().GetField("tag") == null // or...
m.GetType().GetProperty("tag") == null
......只是尝试一下。