I have seen code written which contains ternary operators nested more than 7 levels deep. I find it very difficult to read the code. Is it a good practice to have nested ternary operators? What do you suggest to replace these nested ternary operators with?
This is some code I came across.
var qry = from row in tflResults.AsEnumerable()
                    let _date = row.Field<DateTime>("RestoreDate")
                    let fDeadline = row.IsNull("RestorefDeadline") ? null : row.Field<DateTime?>("RestorefDeadline")
                    where checkSecResp(noResp, SecResp, row) && checkDept(noDept, Depts, row) && checkSpace(selectedWebs, row)
                        && _date >= startDate && _date <= endDate
                    group row by
                    new
                    {
                        RestoreNumber = row.Field<string>("RestoreNumber") ? row.Field<string>("RestoreNumber") : row.Field<string>("RestoreNetNumber"),
                        EDate = _date,
                    }
                        into g
                    let r = g.FirstOrDefault()
                    let RestoreNumber = r.Field<string>("RestoreNumber") ?? r.Field<string>("RestoreNetNumber")
                    let requests = from req in queryRequest
                                   where req.RestoreIntelNumber.StartsWith(RestoreNumber + ".")
                                   where req.Status != "Deleted" && req.Status != "Cancelled"
                                   select req
                    select new
                    {
                        RestoreDate = g.Key.EDate,
                        RestoreRequestDate = r.IsNull("RestoreRequestDate") ? "" : r.Field<DateTime>("RestoreRequestDate").ToLocalTime().Date,
                        RestoreNumber = RestoreNumber,
                        RestoreDraftDeadline = r.IsNull("RestoreOffDeadline") ? "" : r.Field<DateTime>("RestoreOffDeadline").ToLocalTime(),
                        RestoreSecResp = r["RestoreSecResp"],
                        RestoreOffMemberResp = r["RestoreOffMemberResp"],
                        RequestSent = requests.Count() > 0 && requests.All(req => req.Status == "Versont" || req.Status == "Ontvogen")
                                ? "Ja"
                                : requests.Any(req => req.Status == "Versont" || req.Status == "Ontvongen") ? "Wat" : "",
                        RestoreIsfized = r.IsNull("RestoreIsfized") ? false : r.Field<bool>("RestoreIsfized"),
                        IsUrgent = r.IsNull("RestoreIsUrgent") ? "" : r.Field<bool>("RestoreIsUrgent") ? "Ja" : "",
                        WorkingDaysToPrep = r["RestoreUrgency"],
                        fDeadlineForSort = r.IsNull("RestorefDeadline") ? null : r.Field<DateTime>("RestorefDeadline").ToLocalTime()
                    };
            qry = sortedField == "fDeadline"
                ? qry.Where(b => b.fDeadlineForSort == null || startfDeadline == null || endfDeadline == null || (b.fDeadlineForSort >= startfDeadline && b.fDeadlineForSort <= endfDeadline))
                : qry.Where(b => b.RestoreDate >= startDate && b.RestoreDate <= endDate);
            qry = sortedDescending
                ? qry.OrderByDescending(b => sortedField == "fDeadline" ? b.fDeadlineForSort : b.RestoreDate)
                : qry.OrderBy(b => sortedField == "fDeadline" ? b.fDeadlineForSort : b.RestoreDate);