我如何使用linq检查值是否为NULL

时间:2019-03-29 12:40:54

标签: c# linq

我需要使用Linq检查数据库中ZPZ_Von列和ZPZ_Bis是否在相同日期具有相同次数。

我以为我是这样做的,但是在设置了Breik点之后,对我来说它仍然显示为4个值。请改正我出错的地方。

var ZPZ_VON = from n in arrivals where n.ZPZ_Von != null select n;
var ZPZ_BIS = from n in arrivals where n.ZPZ_Bis != null select n;

数据库中的此类数据如下。

enter image description here

3 个答案:

答案 0 :(得分:1)

由于DateTime是一个结构,因此不能为null。因此,将值与null进行比较是没有用的,因为它们永远不会为null,但是您可以将它们与DateTime结构的default()进行比较,因为它们可能就是这样。

我将使用Lambda表达式而不是查询表达式,因为我更喜欢它们,并且它们是C#代码而不是伪SQL

ZPZ_VON = n.Where(x => x.ZPZ_Von != default(DateTime)).ToList();
ZPZ_BIS = n.Where(x => x.ZPZ_Bis != default(DateTime)).ToList();

注意:我删除了评论中的x.ZPZ_VON != null,因为它是多余的,我会编辑评论,但已经超过5分钟了

答案 1 :(得分:0)

您没有提供模型,但我怀疑您已将ZPZ_Von设置为DateTime

基于OP,正确的设置是将ZPZ_Von设为可空值:DateTime?

public class Arrival
{ 
    public DateTime? ZPZ_Von { get; set;}
}

然后您可以像这样检查查询中的null:

n.Where(x => x.ZPZ_Von.HasValue).ToList();

简而言之,这使您的模型能够反映实际的数据库设置,并且从长远来看将避免您的头痛。

答案 2 :(得分:-1)

您应该尝试这个

export class MyComponent implements OnInit, OnDestroy {

  $firstObservable: Observable<number> = timer(0, 1000);
  $secondObservable: Observable<number> = timer(0, 1000);

  private _subscriptions :any[] = [];

  constructor() { }

  ngOnDestroy(): void {
    this._subscriptions .unsubscribe();
  }

  ngOnInit(): void {
    this._subscriptions .push(
      this.$firstObservable.subscribe(console.log)
    );

    this._subscriptions .push(
      this.$secondObservable.subscribe(console.log)
    );
  }

   ngOnDestroy(){
    this._subscriptions.forEach(sub => sub.unsubscribe) ; // ‍♂️‍♂️
  }

}