Как мне сделать выражение запроса, похожее на SQL IN-запрос?
Я пытаюсь сделать что-то в этом роде:
let customerNumbers = set ["12345"; "23456"; "3456"]
let customerQuery = query {
for c in dataContext.Customers do
where(customerNumbers.Contains(c.CustomerNumber))
select c
}
Но я получаю сообщение об ошибке:
System.NotSupportedException: Method 'Boolean Contains(System.String)' has no supported translation to SQL.
Изучите документацию по выражениям запросов по адресу http://msdn.microsoft.com/en-us/library/hh225374.aspx Я должен использовать другой запрос для части содержимого, но этот код не работает, пример не работает:
// Select students where studentID is one of a given list.
let idQuery = query { for id in [1; 2; 5; 10] do select id }
query {
for student in db.Student do
where (idQuery.Contains(student.StudentID))
select student
}
На самом деле idQuery не содержит никакого метода «Содержит».
Я также пробовал:
let customerNumbers = set ["12345"; "23456"; "3456"]
let customerQuery = query {
for c in dataContext.Customers do
where (query { for x in customerNumbers do exists (c.CustomerNumber=x)})
select r
}
Но это дает это сообщение об ошибке:
System.NotSupportedException: Local sequence cannot be used in LINQ to SQL implementations of query operators except the Contains operator
После еще нескольких тестов я заметил, что в дополнение к предложению Джина отлично работает следующее:
let customerNumbers = set ["12345"; "23456"; "3456"]
query {
for customer in dataContext.Customer do
where (query { for x in customerNumbers do contains customer.CustomerNumber})
select customer
}