Вы ошибочно используете оператор присваивания (=) вместо оператора равенства (==).
Ваша линия
where stat.Id = 1
фактически присваивает 1 до stat.ID
, не то, что вы хотите на всех; то присваивание возвращает назначенное значение, в этом случае 1.Поскольку C# не будет неявно конвертировать int
в bool
, вы получите сообщение об ошибке. Вместо этого вы должны использовать оператор ==
, оператор равенства, который будет делать то, что вы ожидаете: проверьте, является ли значение stat.Id равным 1 и возвращает true или false.
Кроме того, для дальнейшего использования, вы можете избежать случайных ошибок присваивания, как это с помощью другого программирования идиомы: положить константу первой, т.е.
1 = stat.Id
В то время как вы все еще получаете ошибку в любом случае здесь, в других случаях, когда вы выполняете случайное задание, или на языках, которые будет, неявно конвертировать в bool
(что было бы ошибкой во время выполнения, которую трудно отследить), вместо этого вы получите ошибку, поскольку вы не можете назначить значение для числового литерала, например 1.
За ваше редактирование LINQ всегда возвращает «ленивый» запрос. Как только вы попытаетесь получить доступ к любым элементам этого запроса, он перечисляет его. IQueryable - это объектное представление этого запроса. Поскольку мы знаем, что запрос представляет собой последовательность string
с (0 или более), мы можем назвать одним из нескольких методов против IQueryable<string>
, чтобы получить на результатах:
.First()
возвращает первый элемент в последовательности, и бросать, если в последовательности нет элементов.
.FirstOrDefault()
вернет первый элемент в последовательности или значение по умолчанию, если последовательность не содержит элементов.
.Single()
вернет элемент, если в последовательности есть только один элемент, и в противном случае выбрасывает (если есть ноль или более одного элемента).
.SingleOrDefault()
вернет элемент, если в последовательности есть только один элемент, значение по умолчанию, если нет элементов, или выброс, если их больше одного.
Какой из них выбрать, зависит от схемы вашей базы данных, а также от желаемого поведения приложения. Если вы знаете, что для настройки будет только одно и ровно одно значение, используйте .Single()
, чтобы вы могли ошибиться и определить, получили ли вы несколько результатов. Если может быть значением, это значение для параметра (или оно может не быть определено), используйте .SingleOrDefault()
. И если параметр может иметь несколько значений в таблице, используйте .First()
или .FirstOrDefault()
.
В любом случае, вы получите либо string
, либо исключение во время выполнения в случае неожиданных результатов.
Вы получаете ту же ошибку в той же строке, «не может неявно преобразовать тип« int »в« bool »? –
@JimDagg извините, мне потребовалось некоторое время, чтобы моя Visual Studio загрузила правильное исправление. Спасибо за вашу помощь! – Liondancer
Если вы сообщите нам, что такое сообщение об ошибке, и где оно происходит, мы, вероятно, сможем решить эту проблему. –