0

シナリオは、行の各列をチェックして、ユーザー 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 を比較できるようにするために、各列にデフォルト値 '' を持つようにデータベースを設計する唯一のオプションはありますか?

4

4 に答える 4

1

私は誤解しているかもしれませんが、通常は次のようなことができます:

mymodel m = new mymodel()
m = db.mytable.Where(t => 
t.id == id && 
(t.No1 == null || t.No1 != userID) &&
(t.No2 == null || t.No2 != userID) &&
(t.No3 == null || t.No3 != userID)).First();

各列で明示的な null チェックを行うと役立つと思いますか?

于 2013-01-18T08:56:46.887 に答える
0

'' の各列にデフォルト値を割り当てると、元のロジックが機能します。

Linq では NULL は比較されませんが、空の文字列は比較されます。

于 2013-01-18T08:46:54.633 に答える
0

最初に UserID に値があることを確認します。

mymodel m = new mymodel()
m = db.mytable.Where(t => 
t.id == id && (!userId.HasValue ||
(t.No1 != userID.Value &&
t.No2 != userID.Value &&
t.No3 != userID.Value))).First();
于 2013-01-18T07:37:43.357 に答える
0

次のような比較関数を書くことができます

public bool Compare(ColmunNo1DataType colValue, UserIdDataType userId){...}

次の LINQ コードを使用する

mymodel m = new mymodel()
m = db.mytable.Where(t => 
t.id == id && 
Compare(t.No1,userID) &&
Compare(t.No2,userID) &&
Compare(t.No3,userID)).First();
于 2013-01-18T07:49:31.593 に答える