Как работает метод TrueForAll? C # LINQ

1

Я пытаюсь использовать метод TrueForAll, но все работает не очень хорошо. Может ли кто-нибудь мне помочь?

Моя проблема: у меня есть список целых чисел, например myIntList. Мне нужно определенное условие для всех целых чисел моего списка.

Пример:

List<TABLE1> myFinalList = db.TABLE1
    .Where(myTable1 => 
        myIntList.TrueForAll(myInt => 
            db.TABLE2.Any(myTable2 => 
                myTable2.field1 == myTable1.field1 
                && myTable2.field2 == myInt)
            && db.TABLE3.Any(myTable3 =>
                myTable3.field1 == myTable1.field1 
                && myTable3.field2 == myInt))).ToList();

Но когда я бегу, я получаю следующее исключение:

LINQ to Entities does not recognize the method 'Boolean TrueForAll[Int32](Int32[], System.Predicate'1[System.Int32])' method, and this method cannot be translated into a store expression.

Я попытался использовать Array.TrueForAll(), но ошибка остается

... Array.TrueForAll(myIntList.toArray(), myInt => ...

Идеи?

  • 3
    Это означает, что ваш поставщик запросов (Entity Framework) не может перевести его на правильный SQL.
  • 0
    возможный дубликат LINQ to Entities не распознает метод 'System.Linq.IQueryable`
Показать ещё 2 комментария
Теги:
linq
asp.net-mvc

2 ответа

4
Лучший ответ

Просто используйте метод linq All().

0

Определение:

Метод List.TrueForAll

Определяет, соответствует ли каждый элемент в списке условиям, определенным указанным предикатом.

Отвечая на ваш вопрос

ваш код выглядит хорошо. Я быстро проверил его (см. Код ниже), просто убедитесь, что возвращаемые значения для функций (Any) являются логическими, если вы посмотрите на сообщение об ошибке, в нем говорится, что целое число (int32) возвращается одним из них

using System.Linq;
using System.Collections;

var myFinalList = db.Tables[0].Select()
            .Where(myTable1 =>
                myIntList.TrueForAll(myInt =>

                    db.Tables[1].Select().Any(myTable2 =>
                        myTable2["field1"] == myTable1["field1"] &&
                        (int)myTable2["field2"] == myInt)

                    &&

                    db.Tables[2].Select().Any(myTable3 =>
                        myTable3["field1"] == myTable1["field1"] &&
                        (int)myTable3["field2"] == myInt))).ToList();

надеюсь, это поможет

  • 0
    Я решил проблему с помощью метода All (). Я полагаю, что int32, упомянутое в исключении, относится к типу параметра, переданному в предикат метода TrueForAll (), но даже в этом случае, спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню