It's a Conditional operator: '?:' which is effectively an "inline-if" statement.
A = B ? C : D;
If B is true, then C is assigned to A, otherwise D is.
So your code could be written as:
var startDateParameter;
if (startDate.HasValue)
{
startDateParameter = new ObjectParameter("StartDate", startDate);
}
else
{
startDateParameter = new ObjectParameter("StartDate", typeof(System.DateTime));
}
which should be a bit more obvious.
Indenting the original mighthave helped clarity:
var startDateParameter = startDate.HasValue ? new ObjectParameter("StartDate", startDate)
: new ObjectParameter("StartDate", typeof(System.DateTime));
Or
var startDateParameter = startDate.HasValue
? new ObjectParameter("StartDate", startDate)
: new ObjectParameter("StartDate", typeof(System.DateTime));
Perhaps.