场景是我需要检查一行的每一列以查看它是否包含用户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
每列的默认值为空栏,ID 为自动。
所以表的当前状态是:
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();
这个想法是首先检查条目,然后运行更新。
现在,当我运行它并且所有列都为空时,我什么也得不到。当我在第 3 行(第 2 列有用户 ID)上运行它时,我什么也得不到。
如果这是直接的 SQL,我可能会在 userID 上放置一个 isnull(userID, '') 包装器,但据我所知,这在 Linq 中是不可能的。
我无法检查 NULL (ietNo2 != userID && t.No2 == NULL),因为这意味着我将能够将 userID 插入到已经在另一列中已经有该 userID 的行中。
我唯一的选择是将数据库设计为在每个列中都有一个默认值''以使 Linq 能够比较 NULL 吗?