2009-02-06 96 views
3

我有一个字典,我想在SQL查询中使用像IN子句。LINQ到SQL和收集操作

我有一个Linq-to-SQL查询,我希望使用此Dictionary的键来检查查询行中的字段。

E.g.

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.看起来这是一个连接提供程序问题,然后,因为马克的建议转换为列表不适用于我。

任何想法?

回答

8

尝试把按键为简单的列表,并使用包含:

var keys = MyDictionary.Keys.ToList(); 

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

(对罗斯文测试 - 正常工作) – 2009-02-06 14:35:30