C# Nullreferenceexception в DataTable.AsEnumerable() где
Как результат, я точно знаю, что в предложении Where есть как минимум 1 Datarow.
И я проверил!= Null перед вызовом 1) Выберите 2) Метод DefaultIfEmpty, конечно, и он прошел без проблем.
Я тоже пытался использовать?? ложь, но я не знаю точный механизм его работы и как его использовать.
Все столбцы обнуляются.
Я не знаю, что здесь не так... я ищу решение целый день... Поскольку я программист-самоучка, мне действительно не хватает фундаментальных знаний.
dt.AsEnumerable().Where(dr => (dr.Field<string>("name_first_API").Contains("Ibuprofen")
|| dr.Field<string>("name_first_API").Contains("Dexibuprofen")
|| dr.Field<string>("name_first_API").Contains("Naproxen")
|| dr.Field<string>("name_first_API").Contains("Meloxicam"))
&& dr.Field<DateTime>("rx_visitdate").Date >= DateTime.Today.AddYears(-3)).
Select(dr => dr.Field<int>("howlongday_rx")).
DefaultIfEmpty(0).Sum();
1 ответ
Решение
Если все может быть нулевым, вы можете использовать:
string[] meds = { "Ibuprofen", "Dexibuprofen", "Naproxen", "Meloxicam" };
int sum = dt.AsEnumerable()
.Select(dr => new
{
name = dr.Field<string>("name_first_API"),
visit = dr.Field<DateTime?>("rx_visitdate"),
howlong = dr.Field<int?>("howlongday_rx")
})
.Where(x => meds.Contains(x.name, StringComparer.InvariantCultureIgnoreCase)
&& x.visit?.Date >= DateTime.Today.AddYears(-3))
.Sum(x => x.howlong ?? 0);