在数据库中搜索一个字段可以为空的对象
Search for an object in the database with a field that can be null
我正在尝试通过检查这些字段与它们的本地副本来从 table 中检索对象
Bin(不为空)、IPN(不为空)、Location Id(不为空)、计数日期(不为空)、Lot 标签(可为空)和序列号(可为空)。
如果我不包括批次或序列号,它工作正常 - 它将 return 具有批次标签的对象(在 table 中,您可以拥有许多相同的项目不同的批次标签或序列号),但它永远不会 return 批次 tag/serial 为空的那些
所以我的问题是如何也搜索这些项目?这是代码行。如果我在末尾包含 lot tag/serial 内容,它将为 null。但是如果我删除它,它将 return 一个项目(除了我还需要它 return 在这些字段中包含 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);
谢谢。
如果您想要所有匹配 Not Null 字段并具有 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));
如果您想要匹配值的记录(如果没有给出值则为空,如果给出 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));
我正在尝试通过检查这些字段与它们的本地副本来从 table 中检索对象
Bin(不为空)、IPN(不为空)、Location Id(不为空)、计数日期(不为空)、Lot 标签(可为空)和序列号(可为空)。
如果我不包括批次或序列号,它工作正常 - 它将 return 具有批次标签的对象(在 table 中,您可以拥有许多相同的项目不同的批次标签或序列号),但它永远不会 return 批次 tag/serial 为空的那些
所以我的问题是如何也搜索这些项目?这是代码行。如果我在末尾包含 lot tag/serial 内容,它将为 null。但是如果我删除它,它将 return 一个项目(除了我还需要它 return 在这些字段中包含 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);
谢谢。
如果您想要所有匹配 Not Null 字段并具有 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));
如果您想要匹配值的记录(如果没有给出值则为空,如果给出 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));