检查lambda表达式中的属性是否为null

我有一个对象列表,我试图绑定到列表视图。 我按两个属性排序。 存在一些问题,即某些记录可能没有其中一个属性。 这导致错误。 我希望它仍然绑定具有该属性的记录。

IEnumerable list = retailerList.Cast(); lvwRetailStores.DataSource = list.OrderByDescending(r => r.Properties["RS_Partner Type"].ToString()) .ThenBy(r => r.Properties["RS_Title"].ToString()); 

 list.Where(r => r.Properties["RS_Partner_Type"] != null && r.Properties["RS_Title"] != null) .OrderByDescending(r => r.Properties["RS_Partner Type"].ToString()) .ThenBy(r => r.Properties["RS_Title"].ToString()); 

或者代替!= null,使用Properties集合具有的任何测试。

我发现了?? 运营商运作良好。 我使用括号来评估null,

例如:

Datetime? Today = DateTimeValue // Check for Null, if Null put Today's date datetime GoodDate = Today ?? DateTime.Now

同样的逻辑在Lambda中起作用,只需使用括号来确保使用正确的比较。

您可以在lambda中使用三元表达式:

 list.OrderByDescending(r => r.Properties["RS_Partner_Type"] == null ? null : r.Properties["RS_Partner Type"].ToString()) .ThenBy(r => r.Properties["RS_Title"] == null ? null : r.Properties["RS_Title"].ToString()); 

另一种常见方法是为集合提供合适的默认值,并在集合没有特定键时返回该值。 例如,如果Properties实现了IDictionary,

 public static class IDictionaryExtension { public static TValue GetValue(this IDictionary dict, TKey key, TValue default) { TValue result; return dict.TryGetValue(key, out result) ? result : dflt; } } ... lvwRetailStores.DataSource = list.OrderByDescending(r => r.GetValue("RS_Partner Type", "").ToString()) .ThenBy(r => r.GetValue("RS_Title","").ToString());