Я пытаюсь выяснить, почему простой запрос в LINQ возвращает странные результаты.
У меня есть представление, определенное в базе данных. Он в основном объединяет несколько других таблиц и выполняет анализ данных. Это действительно ничего особенного, за исключением того факта, что он работает с большим набором данных и может быть немного медленным.
Я хочу запросить это представление на основе длинного. Два примера запросов ниже показывают разные запросы к этому представлению.
var la = Runtime.OmsEntityContext.Positions.Where(p => p.AccountNumber == 12345678).ToList();
var deDa = Runtime.OmsEntityContext.Positions.Where(p => p.AccountNumber == 12345678).Select(p => new { p.AccountNumber, p.SecurityNumber, p.CUSIP }).ToList();
Первый должен вернуть список. Вторым будет список анонимных объектов.
Когда я выполняю эти запросы в рамках сущностей, первый из них возвращает мне список результатов, в которых все они абсолютно одинаковы.
Второй запрос вернет мне данные, где номер счета - тот, который я запросил, а другие значения отличаются. По-видимому, это делается для каждого номера счета, т. Е. Если бы я запрашивал один или другой номер счета, все объекты Позиции для одного счета имели бы одинаковое значение (первое в списке Позиций для этого счета) вторая учетная запись будет иметь набор объектов Position, которые имеют одинаковое значение (опять же, первый в своем списке объектов Position).
Я могу написать SQL, который по сути совпадает с любым из двух запросов EF. Они оба возвращаются с результатами (скажем, четыре), которые показывают правильные данные, один номер счета с разными номерами ценных бумаг.
Почему это происходит ??? Есть ли что-то, что я мог делать неправильно, чтобы, если у меня было четыре результата для первого запроса выше, данные первой записи также появлялись в объектах 2-4-го числа?
Я не могу понять, что могло / могло бы быть причиной этого. Я искал в Google все виды ключевых слов и не видел никого с этой проблемой. Мы частично выделяем класс Positions для дополнительной функциональности (смарт-объект) и некоторых интеллектуальных свойств. Есть даже некоторые конструкторы, которые обеспечивают некоторую поддержку типов моделей представлений. Ничего из этого не вызывается в запросе (я на 99% уверен в этом). Тем не менее, мы делаем этот же шаблон во всем приложении.
Единственное, о чем я могу подумать, это то, что отображение в EDMX является ошибочным. Есть ли способ, которым это могло бы произойти, если бы «первичные ключи» в EDMX не были фактически уникальными, учитывая способ построения представления? Я думаю, что разработчик, который импортировал эту модель в EDMX, позволил дизайнеру автоматически выбрать то, что будет уникальным.
Любая помощь дала бы измученному разработчику некоторую надежду!