DataTable.AsEnumerable() 中的 C# Nullreferenceexception
C# Nullreferenceexception in DataTable.AsEnumerable() Where
据我所知,Where 子句至少有 1 个数据行。
我在调用 1) Select 2) DefaultIfEmpty 方法之前检查了 != null,当然它顺利通过了。
我也试过用?? false 但不知道它的确切工作机制以及如何使用它。
列都是可空的。
我不知道这里出了什么问题...整天都在寻找解决方案..
因为我是自学程序员,所以基础知识真的很匮乏
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();
如果全部可以为空,您可以使用:
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);
据我所知,Where 子句至少有 1 个数据行。
我在调用 1) Select 2) DefaultIfEmpty 方法之前检查了 != null,当然它顺利通过了。
我也试过用?? false 但不知道它的确切工作机制以及如何使用它。
列都是可空的。
我不知道这里出了什么问题...整天都在寻找解决方案.. 因为我是自学程序员,所以基础知识真的很匮乏
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();
如果全部可以为空,您可以使用:
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);