Func 表达式使用的 C# OrderBy

C# OrderBy used by Func Expression

提问人:luprok 提问时间:6/22/2022 最后编辑:McNetsluprok 更新时间:6/22/2022 访问量:188

问:

嗨,我对这个表达式有问题:

  1. 我正在为 OrderBy(orderby(first from list).thenby(second from list)) 创建两个表达式的列表,但在某些情况下 Recipient 可以为 null。
List<Expression<Func<Data, dynamic>>> orderingExpression = new List<Expression<Func<Data, dynamic>>>();
orderingExpression.Add(x => (x.Inhalt.Recipient == null && x.Inhalt.Recipient.Address == null) ? null : x.Inhalt.Recipient.Address.Nummer);

orderingExpression.Add(x => (x.Inhalt.Recipient == null && x.Inhalt.Recipient.Address == null) ? null : x.Inhalt.Recipient.Address.Street);
  1. 稍后在代码中,我像这样使用它:
datatemp = datatemp.OrderBy(orderingExpression.First()).ThenBy(orderingExpression.Last());

但是,即使我在步骤 1 中对两个表达式进行了 null 检查,仍然得到“对象引用未设置为实例” 具有 Recipient 的其他值已正确排序。

我尝试使用字符串。三元运算符中的空而不是 null,但仍然是同样的问题。

我需要以不同的方式编写 null 检查吗?

C# SQL-ORDER-BY nullreferenceException LINQ-表达式

评论

0赞 Kirk Woll 6/22/2022
您正在检查是否为 null 以及是否为 null。而你只在 if 为 null 时执行的第二次检查,从而保证了 NRE。还有你为什么要用?RecipientRecipient.AddressRecipientdynamic
0赞 DarkSquirrel42 6/22/2022
当你尝试时会发生什么,而 xxx 和 yyy 必须被一些有意义的默认值替换......orderingExpression.Add(x => x?.Inhalt?.Recipient?.Address?.Nummer ?? xxx);orderingExpression.Add(x => x?.Inhalt?.Recipient?.Address?.Street ?? yyy);
0赞 luprok 6/22/2022
@KirkWoll 当我删除 Recipient.Address 时,它现在可以工作了。但是是否可以以某种方式添加检查 Recipient.Address?使用dynamic是因为从代码中的其他一些地方,我将需要datatemp orderby(string,decimal,int ...等)
0赞 luprok 6/22/2022
@DarkSquirrel42在这种情况下,我得到了“表达式树 lambda 可能不包含 null 传播运算符”
0赞 luprok 6/23/2022
@KirkWoll好的,我改变了条件,现在还可以了,谢谢x.Inhalt.Recipient != null && x.Inhalt.Recipient.Address != null

答: 暂无答案