LINQ to Entities не возвращает ожидаемый результат - PullRequest
3 голосов
/ 21 мая 2011

Я использую представление для возврата сложного поискового запроса. Когда я использую linq для запроса к EF, он возвращает одну и ту же строку 3 раза (фактическое количество строк правильное).

с использованием LinqPad Я запустил один и тот же linq для моего объекта ef и фактического представления базы данных.

ReadmitPatientList
    .AsQueryable()
    .Where("PatientLastName.StartsWith(\"cooper\")")
    .OrderBy (rpl => rpl.PatientLastName)
    .Dump();

Это linq, который я использую для обоих.

linqpad показывает лямбду как это: EF:

ReadmitPatientList.MergeAs (AppendOnly)
   .Where ( => .PatientLastName.StartsWith ("cooper"))
   .OrderBy (rpl => rpl.PatientLastName)

DB

ReadmitPatientList
   .Where ( => .PatientLastName.StartsWith ("cooper"))
   .OrderBy (rpl => rpl.PatientLastName)

Я не могу опубликовать результаты ... но EF возвращает три строки одной и той же записи. БД возвращает 3 строки отдельных записей. Как и мой sql запрос.

Как насчет моего EF LINQ, который мне нужно изменить, чтобы он работал правильно?


SQL-код, сгенерированный запросом EF Linq. На самом деле возвращает правильные результаты при запуске в проводнике SQL.

1 Ответ

4 голосов
/ 21 мая 2011

Это происходит, если у объекта «Пациент» нет первичного ключа или столбцы, выведенные в качестве первичного ключа, совпадают в нескольких записях в наборе результатов.EF использует внутреннюю идентификационную карту, которая требует, чтобы каждая уникально идентифицированная запись повторно использовала один и тот же экземпляр объекта.Таким образом, если вы вернете три записи из базы данных, которые имеют одинаковый уникальный идентификатор для EF, вернет перечисление трех одинаковых экземпляров, представляющих первую запись из набора результатов (подробнее о карте идентичности также здесь ).То же самое происходит в DataContext Linq-to-sql.

...