2017-02-21 30 views
1

Я пытаюсь разработать запрос LINQ Query, который будет проверять, если строка из базы данных находится внутри массива без подстрок, возвращающих true, а всего целую строку.Множественная входная анонимная функция в выражение для использования в LINQ

Func<int, string[], bool> predicate = (i, x) => x.Any(i.ToString().Equals); 

       user.Company += (from c in context.Tbl_Institute 
           where (predicate(c.Institute_ID,values)) 
           select c.Institute_Title + "," 
           ).ToString(); 

меня это до сих пор, который компилирует, но дает мне ошибку: тип выражения узла LINQ «Invoke» не поддерживается в LINQ к Entities.

Какой из исследований, по-видимому, означает, что мне нужно использовать выражение.

Однако это не скомпилировано.

Expression`<Func<int, string[], bool>> predicate = (i, x) => x.Any(i.ToString().Equals);` 

В predicate(c.Institude_ID,values) есть ошибка чтения "имя метода ожидаемого".

У кого-нибудь есть опыт? Я совершенно новичок в анонимных функциях.

EDIT: В соответствии с запрошенным здесь кодом, который не компилируется, я приношу свои извинения, если не был ясен.

Expression<Func<int, string[], bool>> predicate = (i, x) => x.Any(i.ToString().Equals); 
user.Company += (from c in context.Tbl_Institute 
       where (predicate(c.Institute_ID,values)) 
       select c.Institute_Title + ",").ToString(); 
+1

Я не вижу ничего явно неправильного в крошечном фрагменте кода, который вы поделили. Похоже, что что-то не так с объявлением «предиката». Но без хорошего [mcve], который надежно воспроизводит проблему, я не могу указать на что-то конкретное. Пожалуйста, улучшите свой вопрос. –

+0

Эта функция не скомпилируется сама по себе при смене функции на выражение. Не знаете, как будет работать любой другой код, если явно указанная функция возвращает ошибку. –

+1

@AnthonyDrury - Ваш код выглядит немного странным. Вы вызываете '.ToString()' на 'IQueryable <>'. Вам действительно нужно предоставить нам [mcve]. Это означало бы предоставление нам минимального количества кода, который мы могли бы скопировать-вставить и скомпилировать, чтобы увидеть ошибку, которую вы получаете. – Enigmativity

ответ

1

Вы просите Entity Framework немного больше, здесь. Я не понимаю, почему вы сохраняете эту функцию соответствия вне запроса LINQ, не могли бы вы объяснить, почему вы это делаете? Я думаю, что EF борется с этим.

Вот кусок кода, который я думаю, должно работать:

List<string> values = new List<string> { "1", "2", "3", "4" }; 

var matchingInstitutesNames = context 
    .Tbl_Institute 
    .Where(x => values.Contains(x.Institute_Id.ToString())) 
    .Select(x => x.Institute_Title) 
    .ToList(); 

var joinedInstitutesNames = string.Join(",", matchingInstitutesNames); 
user.Company += joinedInstitutesNames; 

Если это не работает, вы можете превратить ваш список string в список int так EF не должен сделайте литье от int до string.

+0

Привет! Да, я просто придумал решение, которое очень близко к этому. Изменение моего места на values.Any (s => c.Institute_ID.ToString(). Equals (s)) Это компилируется, но я получаю странный возвращаемое значение, которое, как представляется, является массивным запросом, а не фактическим ответом. Я открою для вас новый вопрос, если вы хотите проверить это. –

+0

Просто попробовал ваш, и он отлично работал! Благодаря! –

+1

счастлив, что это вам помогло. –

 Смежные вопросы

  • Нет связанных вопросов^_^