Linq to SQL和集合操作

3

我有一个字典,我想在SQL查询中像IN子句一样使用它。

我有一个Linq-To-SQL查询,我想使用这个字典的键来检查查询行中的字段。

例如:

bool result = DataContext.Table.Any(res => MyDictionary.ContainsKey(res.field1)); 

实际上,这类似于

    exists(select * from Table where field1 in (select id from DictionaryKeys)) 

其中DictionaryKeys将是将键扩展到自己的表中的扩展。

不幸的是,我得到了

System.NotSupportedException was unhandled
Message="Method 'Boolean ContainsKey(System.String)' has no supported translation to SQL."
Source="System.Data.Linq"

我理解这个错误,但是我很难想到另一种解决方案。

编辑:我正在连接到SQL 2005。看起来这是一个连接提供程序的问题,因为Marc建议转换为List对我不起作用。

有任何想法吗?

1个回答

8
尝试将键放入简单的列表中,并使用Contains函数:
var keys = MyDictionary.Keys.ToList();

DataContext.Table.Any(res => keys.Contains(res.field1));

谢谢您的建议,但不需要更改 - 顺便说一下,我正在连接到 SQL Server 2005。 - Unsliced
你使用这个版本时具体遇到了什么错误?(它不可能与ContainsKey的错误相同,而2005/2008提供程序也不能单独生成“不支持的翻译”异常)。 - DamienG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接