c# – 在LINQ to SQL中选择“IN”

我得到一个要更新的实体列表,我有他们的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.抱歉.

最佳答案 实际上,由于条款WHERE 0 = 1,此SQL将返回一个空记录集(即根据模式正确映射,但没有行).

你给出的代码似乎是正确的,但有些东西让查询提供者确信永远不会有匹配的行.

假设它在这里不正确,我会查看id属性的列映射.它是否与数据库正确匹配?

点赞