【发布时间】:2011-03-28 11:01:59
【问题描述】:
我得到一个要更新的实体列表,并且我有它们的 ID。我想从数据库中获取原始的,所以我这样做了:
String[] ids = updatedEvents.Select(ue => ue.id).ToArray();
var originalEventsToUpdate = Db.tbl_ffk_event
.Where(e => ids.Contains(e.id))
.ToArray();
但是我使用日志得到的是这个生成的 SQL:
SELECT [t0].[id], [t0].[fs_mapping_id], [t0].[fs_id_value], [t0].[desc]
FROM [dbo].[tbl_ffk_event] AS [t0]
WHERE 0 = 1
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1
而那个 SQL 的意思是“获取整个表”。
如何生成这样的“IN”:
SELECT [t0].[id], [t0].[fs_mapping_id], [t0].[fs_id_value], [t0].[desc]
FROM [dbo].[tbl_ffk_event] AS [t0]
WHERE [t0].[id] IN ('aaa','bbb','ccc','ddd','eee',)
提前致谢。
编辑:
我觉得自己很蠢,我没有看到WHERE 0 = 1。这是因为在那时,ids 集合中没有任何内容。我现在检查了确保有项目,并且正确生成了 SQL。对不起。
【问题讨论】:
-
您说,“SQL 的意思是'获取整个表'。”我想你的意思是,“一无所获”。那个 WHERE 子句总是错误的。
-
你的身份证真的是字符串吗?
-
我以为它说的是 'WHERE 1 = 1' 我没有意识到这一点。
-
vtortola,我不会对那个感到愚蠢,因为 SQL 的格式(虽然它必须做的事情是正确的)有点出乎意料。不过,考虑到
WHERE [t0].[id] IN ()将是无效的,我想这是足够明智的SQL。聪明的 linq ;)
标签: c# .net sql linq linq-to-sql