Мне нужно запустить хранимую процедуру на SQL Server, используя LINQ, и выдать исключение, если он возвращает какие-либо строки. Следующий код работает, хотя цикл foreach
недостаточно хорошо передает мои намерения:
foreach (var badData in context.BadDataForDay(today))
{
throw new Exception("Bad data found");
}
Я хотел написать что-то вроде IF EXISTS()
в SQL, но с LINQ:
var badData = from p in context.BadDataForDay(today) select p;
if (badData.Any())
{
throw new Exception("Bad data found");
}
Этот код компилируется, но Any()
всплывает со следующим сообщением:
Указанный состав недействителен
Чего мне не хватает? * Any()
правильный метод для использования в этом случае?
Edit:
Я отладил, и код взрывается до вызова хранимой процедуры в следующей сгенерированной строке:
return ((ISingleResult<BadDataResult>)(result.ReturnValue));
Чтобы заставить его работать, я сделал следующее:
Я добавил еще одну хранимую процедуру и перетащил ее в свой контекст:
CREATE PROCEDURE dbo.BadDataExists
@AsOfDate DATETIME
AS
BEGIN ;
SET NOCOUNT ON ;
SELECT COUNT(*) AS Cnt
FROM SomeTable
WHERE SOME conditions ;
END ;
Я использовал этот код:
foreach (var badDataCount in
context.BadDataExists(asOfDate).Where(badDataCount => badDataCount.Cnt > 0))
{
Хотя теперь это работает, мне бы очень хотелось понять, чего мне не хватало.