Я пытаюсь использовать метод 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 => ...
Идеи?
Просто используйте метод linq All().
Определение:
Метод 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();
надеюсь, это поможет