2016-07-13 3 views
1

nullにすることができ、フィールドとデータベース内のオブジェクトを検索するそれらのローカルコピーに対してこれらのフィールドをチェックして、私はテーブルからオブジェクトを取得しようとしています

ビン(nullではない)、IPN(未NULL)、ロケーションID(NULLではない)、カウント日付(NULLではない)、ロット・タグ(ヌル可能)、およびシリアル番号(NULL可能)。

ロットまたはシリアルを含まない場合はうまくいきます。ロットタグを持つオブジェクトを返します(表では、ロットタグやシリアル番号が異なる同じアイテムを多数持つことができます)が、ロットタグ/シリアルがヌルであるものを返すことはありません

私の質問はどのようにこれらのアイテムも検索していますか?ここにコード行があります。最後にロットタグ/シリアルのものを含めると、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 == LocalSelectedItem.LotTag && 
    i.SerialNumber == LocalSelectedItem.SerialNumber); 

ありがとうございます。

答えて

1

あなたが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)); 

を(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)); 

あなたは、彼らがnullの場合LocalSelectedItem値を無視する場合:

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)); 
+0

ありがとうございます。私は本当に最初のものをとてもシンプルに思っていませんでした - 私の脳はちょうど仕事を止めました。私はそれが何らかの理由でより複雑なものだと思った。ありがとうございました! – Fivestar

+1

また、ご存知の場合はフォローアップの質問もあります。 LocalSelecteditem.LotTagがnullである私の元の答えのようにはどうしてうまくいかないのでしょうか? Shouldnt i.LotTag == LocalSelectedItem.LotTagはとにかくtrueに評価されますか? – Fivestar

+1

データベースの世界では、2つのNULL値が互いに等しくありません。それはなぜIS NULLとIS NOT NULLがあるのか​​。したがって、NULLのフィールドの場合、field!= NULLになります。 –

関連する問題