var adminCov = db.SearchAgg_AdminCovs.SingleOrDefault(l => l.AdminCovGuid == covSourceGuid);
adminCov продолжает возвращать нуль. Когда я запускаю профилировщик SQL, я могу увидеть сгенерированный linq, когда я пройду мимо этого в Management Studio, я получаю ожидаемый результат.
LinqToSql генерирует это:
exec sp_executesql N'SELECT [t0].[AdminCovGuid], [t0].[AdminPolicyId], [t0].[CertSerialNumber], [t0].[CertNumber], [t0].[PseudoInsurerCd], [t0].[SourceSystemCode], [t0].[CovSeqNumber], [t0].[RiderSeqNumber], [t0].[CovRiderIndicator], [t0].[CovCd], [t0].[AddrSeqNumber], [t0].[TransferSeqNumber], [t0].[CovStatusIndicator], [t0].[CovEffectiveDate], [t0].[CovExpirationDate], [t0].[CovCancelDate], [t0].[ClmIntegCode], [t0].[ClmNumber], [t0].[ClmCertSeqNumber], [t0].[TermNumber], [t0].[CovPaidThruDate], [t0].[BillThruDate], [t0].[BillModeCode], [t0].[BillModeDesc], [t0].[CalcModeCode], [t0].[CalcModeDesc], [t0].[Form1Name], [t0].[BenefitAmt], [t0].[CovDesc], [t0].[ProdLineDesc], [t0].[PremiumAmt], [t0].[PremiumTypeIndicator], [t0].[PremiumTypeDesc]
FROM [dbo].[SearchAgg_AdminCov] AS [t0]
WHERE [t0].[AdminCovGuid] = @p0',N'@p0 uniqueidentifier',@p0='D2689692-33E8-4B31-A77B-2D3A627145D4'
Когда я выполняю, я получаю результат. Что мне здесь не хватает? Спасибо за любую помощь, ~ ck в Сан-Диего
Это действительно хороший вопрос. У меня была такая же проблема с Linq to SQL при выборе счетов-фактур в диапазоне дат. Некоторые из них не присутствовали в результатах объекта, пока они были включены в результат сгенерированного SQL-запроса. У меня были серьезные проблемы с этим, потому что некоторые счета-фактуры не были экспортированы в бухгалтерское программное обеспечение.
Я сделал, чтобы создать хранимую процедуру, и все было отлично.
Мне бы очень хотелось узнать истинное решение для этого и почему это произошло.
В вашей таблице SearchAgg_AdminCovs установлен первичный ключ? Я не уверен, но у меня была какая-то головная боль, когда я забыл установить его, но не уверен, что это был выбор/обновление/вставка или удаление.
Использование Single или SingleOrDefault всегда является рискованным, если может быть нуль или более одной записи, соответствующей критериям. SingleOrDefault возвращает null, если нет совпадений или более одного совпадения (в вашем случае это может быть больше одного, поскольку вы говорите, что есть данные). Это должно привести к тому, что "Single" выкинет исключение, если вы попробуете это. В качестве альтернативы вы можете попытаться использовать FirstOrDefault, чтобы получить первое совпадение, если есть хотя бы одно совпадение. Он вернет null, если совпадений нет.
Получаете ли вы свой результат, если вы измените свой оператор следующим образом (обратите внимание на "Equals" вместо "==" )?
var adminCov = db.SearchAgg_AdminCovs.SingleOrDefault(l => l.AdminCovGuid.Equals(covSourceGuid));
В прошлом я столкнулся с некоторыми проблемами равенства равенства с идентификаторами GUID (обычно в Unit Testing), но то же самое можно было бы применить здесь.
SingleOrDefault
ли он, если вы изменитеSingleOrDefault
наSingle
? .. Посмотрите, не генерирует ли это сообщение «Последовательность не содержит элементов»