-2

据我所知,Where 子句至少有 1 个 Datarow。

我在调用 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();
4

1 回答 1

3

如果 all 可以为空,您可以使用:

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);
于 2018-07-27T07:43:29.953 回答