【发布时间】:2012-12-30 16:36:18
【问题描述】:
我试图弄清楚如何在 LINQ 中进行查询,其中某些值可以为空。
接下来是我的桌子:
ID int
Key1 int
Key2 int?
Key3 int?
Value string
uniq = Key1+Key2+Key3+Value
现在我需要根据唯一约束检查现有记录是否已经存在。
我尝试了以下方法:
Object tmp = model.table.FirstOrDefault(row => row.Key1 == newItem.Key1 &&
(row.Key2.HasValue && newItem.Key2.HasValue && row.Key2.Value == newItem.Key2.Value) &&
(row.Key3.HasValue && newItem.Key3.HasValue && row.Key3.Value == newItem.Key3.Value) &&
row.Value == newItem.Value);
和:
Object tmp = model.table.FirstOrDefault(row => row.Key1 == newItem.Key1 &&
row.Key2 == newItem.Key2 &&
row.Key3 == newItem.Key3 &&
row.Value == newItem.Value);
但是当其中一个键为空时,两者都没有给我正确的结果!
有没有办法编写正确的 LINQ 查询?
【问题讨论】:
-
如果
row.Key2和newItem.Key2都为空,结果是否应该出现在tmp中? -
是的!我只是意识到第一个查询是错误的。如果一行 (1,222,null,null,3)... 并且我正在使用相同的数据进行查询,则应该返回
-
太棒了。没有其他问题了吗?
-
问题还在...