Вы можете заменить
(Guid)piItem.GetValue(piField.GetValue(csh, null), null))
на
(csh != null ? (Guid)piItem.GetValue(piField.GetValue(csh, null), null)) : Guid.Empty)
, который должен работать, если Items
иногда не содержит Guid.Empty
.
PS.изучая что-то очень, очень крутое, преобразуйте это выражение в лямбду:
var myCaseType = typeof(MyCaseObj);
var param = Expression.Parameter(myCaseType);
var cond = Expression.Condition(
Expression.NotEqual(param, Expression.Constant(null, myCaseType))
, Expression.Property(param, "SomePropertyName")
, Expression.Constant(Guid.Empty)
);
var lambda = (Func<MyCaseObj,Guid>)Expression.Lambda(cond, param).Compile();
Теперь вы можете переписать ваш выбор следующим образом:
var CasesToProcess = (from csh in CasesInGroup
where lambda(csh)In(fld.Items.Select(i => i.ItemID))
select csh);