У меня есть DataTable и хочу выбрать несколько записей с Linq в этом формате:NullReferenceException Ошибка при попытке итерации в IEnumerator
var result2 = from row in dt.AsEnumerable()
where row.Field<string>("Media").Equals(MediaTp, StringComparison.CurrentCultureIgnoreCase)
&& (String.Compare(row.Field<string>("StrDate"), dtStart.Year.ToString() +
(dtStart.Month < 10 ? '0' + dtStart.Month.ToString() : dtStart.Month.ToString()) +
(dtStart.Day < 10 ? '0' + dtStart.Day.ToString() : dtStart.Day.ToString())) >= 0
&& String.Compare(row.Field<string>("StrDate"), dtEnd.Year.ToString() +
(dtEnd.Month < 10 ? '0' + dtEnd.Month.ToString() : dtEnd.Month.ToString()) +
(dtEnd.Day < 10 ? '0' + dtEnd.Day.ToString() : dtEnd.Day.ToString())) <= 0)
group row by new { Year = row.Field<int>("Year"), Month = row.Field<int>("Month"), Day = row.Field<int>("Day") } into grp
orderby grp.Key.Year, grp.Key.Month, grp.Key.Day
select new
{
CurrentDate = grp.Key.Year + "/" + grp.Key.Month + "/" + grp.Key.Day,
DayOffset = (new DateTime(grp.Key.Year, grp.Key.Month, grp.Key.Day)).Subtract(dtStart).Days,
Count = grp.Sum(r => r.Field<int>("Count"))
};
и в этом коде, я стараюсь повторять его с помощью следующего кода:
foreach (var row in result2)
{
//... row.DayOffset.ToString() + ....
}
Эта проблема возникла: Ссылка на объект не установлена в экземпляр объекта.
Я думаю, что это происходит, когда нет записи с вышеуказанными критериями. Я пытался изменить его Enumerator, как это, и использовать MoveNext(), чтобы проверить данные о том, что или нет:
result2.GetEnumerator();
if (enumerator2.MoveNext()) {//--}
, но все та же ошибка.
В чем проблема?
@SarahN. .. 'if (result2! = null) foreach (......) {...}' –
@Thirisangu. Запрос linq никогда не вернет 'null'. Проблема заключается в запросе. – sloth
@Sloth Запрос LINQ никогда не возвращает 'null' !!! :( –