Linq help - Sql trace возвращает результат, но datacontext возвращает null

2
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 в Сан-Диего

  • 0
    SingleOrDefault ли он, если вы измените SingleOrDefault на Single ? .. Посмотрите, не генерирует ли это сообщение «Последовательность не содержит элементов»
Теги:
linq
linq-to-sql

4 ответа

1
Лучший ответ

Это действительно хороший вопрос. У меня была такая же проблема с Linq to SQL при выборе счетов-фактур в диапазоне дат. Некоторые из них не присутствовали в результатах объекта, пока они были включены в результат сгенерированного SQL-запроса. У меня были серьезные проблемы с этим, потому что некоторые счета-фактуры не были экспортированы в бухгалтерское программное обеспечение.

Я сделал, чтобы создать хранимую процедуру, и все было отлично.

Мне бы очень хотелось узнать истинное решение для этого и почему это произошло.

  • 0
    Это была странная ошибка с моей стороны. Мы разрабатываем несколько баз данных, и это была просто проблема со строкой соединения. Надзор действительно.
  • 0
    У меня внезапно возникла эта проблема, кто-нибудь когда-нибудь получал реальный ответ на это?
Показать ещё 1 комментарий
0

В вашей таблице SearchAgg_AdminCovs установлен первичный ключ? Я не уверен, но у меня была какая-то головная боль, когда я забыл установить его, но не уверен, что это был выбор/обновление/вставка или удаление.

0

Использование Single или SingleOrDefault всегда является рискованным, если может быть нуль или более одной записи, соответствующей критериям. SingleOrDefault возвращает null, если нет совпадений или более одного совпадения (в вашем случае это может быть больше одного, поскольку вы говорите, что есть данные). Это должно привести к тому, что "Single" выкинет исключение, если вы попробуете это. В качестве альтернативы вы можете попытаться использовать FirstOrDefault, чтобы получить первое совпадение, если есть хотя бы одно совпадение. Он вернет null, если совпадений нет.

0

Получаете ли вы свой результат, если вы измените свой оператор следующим образом (обратите внимание на "Equals" вместо "==" )?

var adminCov = db.SearchAgg_AdminCovs.SingleOrDefault(l => l.AdminCovGuid.Equals(covSourceGuid));

В прошлом я столкнулся с некоторыми проблемами равенства равенства с идентификаторами GUID (обычно в Unit Testing), но то же самое можно было бы применить здесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню