2009-02-06 2 views
3

У меня есть словарь, который я хотел бы использовать как предложение IN в SQL-запросе.Операции Linq to SQL и Collection

У меня есть запрос Linq-To-SQL, где я бы хотел использовать эти словарные ключи для проверки полей в строках запроса.

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

(протестирован против Борей - работает отлично) –

+0

Спасибо за предложение, но без изменения - FWIW Я подключение к SQL Server 2005. – Unsliced

+0

Какая ошибка вы получаете с этой версией? (Он не может быть таким же, как ContainsKey и поставщики 2005/2008 не могут самостоятельно генерировать исключения «без поддержки перевода»). – DamienG