Операции Linq to SQL и Collection - PullRequest
       15

Операции Linq to SQL и Collection

3 голосов
/ 06 февраля 2009

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

У меня есть запрос 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. Похоже, что это проблема поставщика подключений, потому что предложение Марка перевести в Список не работает для меня.

Есть идеи?

1 Ответ

8 голосов
/ 06 февраля 2009

Попробуйте поместить ключи в простой список и использовать Contains:

var keys = MyDictionary.Keys.ToList();

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