シナリオは、行の各列をチェックして、ユーザー ID が含まれているかどうかを確認する必要があるというものです。ユーザーIDが他の列に存在しない場合にのみ、ユーザーIDを列に挿入できるようにしたいのです。
テーブルは次のようになります。
Col1 = ID (PK)
Col2 = No1 varchar(50) ..... also tried GUID
Col3 = No2 varchar(50) ..... also tried GUID
Col4 = No3 varchar(50) ..... also tried GUID
各列のデフォルト値は null バーで、ID は auto です。
したがって、テーブルの現在の状態は次のとおりです。
1 NULL NULL NULL
2 NULL NULL NULL
3 NULL 2 NULL
私がしたいのは、userID が他のどの列にも存在しないという条件で、選択した列に userID 値を挿入することです。
私は次のことを試しました:
mymodel m = new mymodel()
m = db.mytable.Where(t =>
t.id == id &&
t.No1 != userID &&
t.No2 != userID &&
t.No3 != userID).First();
アイデアは、最初にエントリを確認してから更新を実行することです。
これを実行すると、すべての列が null になり、何も返されません。行 3 (列 2 にユーザー ID がある) で実行すると、何も得られません。
これが SQL ストレートの場合、isnull(userID, '') ラッパーをユーザー ID に配置する可能性がありますが、私が知る限り、これは Linq では不可能です。
NULL (ietNo2 != userID && t.No2 == NULL) をチェックできません。これは、別の列にすでに userID がある行に userID を挿入できることを意味するためです。
Linq が NULL を比較できるようにするために、各列にデフォルト値 '' を持つようにデータベースを設計する唯一のオプションはありますか?