我得到一個要更新的實體列表,並且我有他們的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