我得到一个要更新的实体列表,并且我有他们的ID。我想从数据库中获取原始的,所以我做的:在LINQ to SQL中选择“IN”
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子句总是假的。 – 2011-03-28 11:09:32
你的ID确实是字符串? – Pleun 2011-03-28 11:14:26
我以为它说'Where 1 = 1'我没有意识到这一点。 – vtortola 2011-03-28 11:19:45