Я пытаюсь понять, почему простой запрос в LINQ возвращает нечетные результаты.Запрос 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 для добавления функциональности (smart object) и некоторых интеллектуальных свойств. Есть даже некоторые конструкторы, которые предоставляют некоторую поддержку типа модели вида. Ничего из этого не вызвано в запросе (я на 99% уверен в этом). Тем не менее, мы делаем эту же схему во всем приложении.
Единственное, о чем я могу думать, это то, что отображение в EDMX является винным. Есть ли способ, что это произойдет, если «первичные ключи» в EDMX на самом деле не были уникальными, учитывая способ построения представления? Я думаю, что разработчик, который импортировал эту модель в EDMX, позволил дизайнеру автоматически выбрать, что было бы уникальным.
Любая помощь может привести к тому, что у вас будет определенная надежда!
Возьмите сгенерированный SQL-скрипт и запустите его в интерактивном режиме в Management Studio, чтобы узнать, что происходит в данный момент. –
Как уже говорилось, возможно, используйте профилировщик, чтобы посмотреть, как SQL подвергается экссудации. –