VB.NET Проблема Entity Framework с предложением WHERE и логическими значениями

#asp.net #sql #vb.net #linq #entity-framework

#asp.net #sql #vb.net #linq #entity-framework

Вопрос:

Я довольно новичок в MVC и Entity Framework, но я уверен, что это должно быть прямолинейно. У меня есть класс с логическим «Активным» флагом. Затем у меня есть функция, которая возвращает результаты по убыванию даты. Все, что я хочу сделать, это убедиться, что возвращаются только активные записи. Должно быть простым, но оно завершается ошибкой со следующей ошибкой:

Ошибка 13 Не удалось разрешить перегрузку, поскольку с этими аргументами невозможно вызвать доступное ‘Where’: Общедоступная функция метода расширения Where(предикат как System.Функция (из обзора, целое число, логическое значение)) Как система.Коллекции.Общий.IEnumerable (из обзора) ‘ определен в ‘System.Linq.Enumerable’: значение типа ‘Boolean’ не может быть преобразовано в ‘System.Функция (из PowellCasting.Модели.Обзор, целое число, логическое значение)’. Общедоступная функция метода расширения Where(предикат как System.Функция (из обзора, логическое значение)) Как система.Коллекции.Общий.IEnumerable (из обзора) ‘ определен в ‘System.Linq.Enumerable’: значение типа ‘Boolean’ не может быть преобразовано в ‘System.Функция (из PowellCasting.Модели.Обзор, логическое значение)’. Общедоступная функция метода расширения Where(предикат Как System.Linq.Выражения.Выражение (системы.Функция (из обзора, целое число, логическое значение))) Как System.Linq.IQueryable (для проверки) ‘ определен в ‘System.Linq.Запрашиваемое’: значение типа ‘Boolean’ не может быть преобразовано в ‘System.Linq.Выражения.Выражение (системы.Функция (из PowellCasting.Модели.Обзор, целое число, логическое значение))’. Общедоступная функция метода расширения Where(предикат Как System.Linq.Выражения.Выражение (системы.Функция (из обзора, логическое значение))) Как System.Linq.IQueryable (для проверки) ‘ определен в ‘System.Linq.Запрашиваемое’: значение типа ‘Boolean’ не может быть преобразовано в ‘System.Linq.Выражения.Выражение (системы.Функция (из PowellCasting.Модели.Обзор, логическое значение))’. C:Web Проекты Powell Casting PowellCasting PowellCastingМодели Обзор.vb 42 14 PowellCasting

Похоже, что ему не нравится сравнивать логические значения, но они имеют один и тот же тип данных. Я уверен, что это должно быть просто, но был бы признателен за помощь. Пожалуйста, посмотрите мой код ниже.

Обзор общедоступного класса

 Private PowellCastingDB As PowellCastingEntites = New PowellCastingEntites

<ScaffoldColumn(False)>
Public Property ReviewID As Integer
<Required(ErrorMessage:="An review title is required")>
<StringLength(256)>
<DisplayName("Title")>
Public Property Title As String
<DisplayName("Heading")>
Public Property Heading As String
<DisplayName("ReviewText")>
<StringLength(4096)>
Public Property ReviewText As String
<DisplayName("Author")>
<StringLength(256)>
Public Property Author As String
<DisplayName("Publication")>
<StringLength(150)>
Public Property Publication As String
<DisplayName("PublicationDate")>
Public Property PublicationDate As Date
<DisplayName("PublicationLink")>
<StringLength(1000)>
Public Property PublicationLink As String
<DisplayName("Image")>
<StringLength(512)>
Public Property Image As String
<DisplayName("Active")>
Public Property Active As Boolean

Public Property Reviews As List(Of Review)

Public Function GetLatestReviews(ByVal count As Integer) As List(Of Review)
  Return PowellCastingDB.Reviews.Where(Active = True).
  OrderByDescending(Function(a) a.PublicationDate).
   Take(count).
    ToList()
End Function
  

Конечный класс
Конечное пространство имен

Комментарии:

1. Я пишу на C #, поэтому я не предоставляю это в качестве ответа, но разве вам не нужно что-то вроде. Где (Функция (обзор) обзор. Активный = True)?

Ответ №1:

Вам необходимо указать лямбда-выражение:

 Return PowellCastingDB.Reviews.Where(Function(x) x.Active = True).
    (rest of query)
  

Или просто:

 Return PowellCastingDB.Reviews.Where(Function(x) x.Active).
    (rest of query)
  

Комментарии:

1. Спасибо за быстрый ответ, Джон — я думал, что попробовал это, и он не вернул никаких результатов (хотя и без ошибок), но это действительно работает. Спасибо за это 🙂 Я довольно новичок в этом, поэтому я не совсем уверен, что такое лямбда-выражение — зачем мне нужна функция для предложения where? Я уверен, что разберусь с этим.

2. Where работает с использованием функции, которая вычисляет, если условие выполнено. Если это так, он «выдает» результат другим функциям. Заставляя Where принимать функцию, которая возвращает логическое значение, мы получаем общую реализацию для выполнения этой задачи независимо от того, какое условие должен утверждать ваш запрос.

Ответ №2:

Попробуйте это:

 Return PowellCastingDB.Reviews.Where(Function(review) review.Active = True)