在数据库中搜索字段可为 null 的对象

本文关键字:null 对象 字段 数据库 搜索 | 更新日期: 2023-09-27 17:57:02

我正在尝试通过检查这些字段与它们的本地副本来从表中检索对象

箱(不为空)、IPN(非空)、位置 ID(不为空)、

计数日期(不为空)、批次标记(可为空)和序列号(可为空)。

如果我不包括批次或序列号,它工作正常 - 它将返回具有批次标签的对象(在表中,您可以拥有许多具有不同批次标签或序列号的相同项目),但它永远不会返回批次标签/序列号为空的那些

所以我的问题是我如何搜索这些项目?这是代码行。如果我在末尾包含批次标签/序列内容,它将为空。但是如果我删除它,它将返回一个项目(除了我还需要它来返回这些字段中包含 null 的项目)。

InventoryPhysicalCount editItem = DatabaseDataContext.InventoryPhysicalCounts.First(i => 
    i.Bin == LocalSelectedItem.Bin && i.IPN == LocalSelectedItem.IPN &&
    i.LocationId == LocalSelectedItem.LocationId &&
    i.CountDate == LocalSelectedItem.CountDate && 
    i.LotTag == LocalSelectedItem.LotTag && 
    i.SerialNumber == LocalSelectedItem.SerialNumber);

谢谢。

在数据库中搜索字段可为 null 的对象

如果希望所有记录都与"非空"字段匹配,并且具有"空"或与给定值匹配的"空"字段:

InventoryPhysicalCount editItem =   
    DatabaseDataContext.InventoryPhysicalCounts.First(i => 
        i.Bin == LocalSelectedItem.Bin && i.IPN == LocalSelectedItem.IPN &&
        i.LocationId == LocalSelectedItem.LocationId &&
        i.CountDate == LocalSelectedItem.CountDate && 
        (i.LotTag == null || i.LotTag == LocalSelectedItem.LotTag) && 
        (i.SerialNumber == null || i.SerialNumber == LocalSelectedItem.SerialNumber));

如果需要与值匹配的记录(如果未给出任何值,则为 Null,如果未给定值,则为 Null,如果给定LocalSelectedItem值,则

为值):
InventoryPhysicalCount editItem =   
    DatabaseDataContext.InventoryPhysicalCounts.First(i => 
        i.Bin == LocalSelectedItem.Bin && i.IPN == LocalSelectedItem.IPN &&
        i.LocationId == LocalSelectedItem.LocationId &&
        i.CountDate == LocalSelectedItem.CountDate && 
        ((i.LotTag == null && LocalSelectedItem.LotTag == null) || i.LotTag == LocalSelectedItem.LotTag) && 
        ((i.SerialNumber == null && LocalSelectedItem.SerialNumber == null) || i.SerialNumber == LocalSelectedItem.SerialNumber));

如果要忽略 LocalSelectedItem 值(如果它们为 Null):

InventoryPhysicalCount editItem =   
    DatabaseDataContext.InventoryPhysicalCounts.First(i => 
        i.Bin == LocalSelectedItem.Bin && i.IPN == LocalSelectedItem.IPN &&
        i.LocationId == LocalSelectedItem.LocationId &&
        i.CountDate == LocalSelectedItem.CountDate && 
        (LocalSelectedItem.LogTag == null || i.LotTag == LocalSelectedItem.LotTag) && 
        (LocalSelectedItem.SerialNumber == null || i.SerialNumber == LocalSelectedItem.SerialNumber));