在数据库中搜索字段可为 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);
谢谢。
如果希望所有记录都与"非空"字段匹配,并且具有"空"或与给定值匹配的"空"字段:
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));