Запрос 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();

Первый должен возвратить Список. Второй будет списком анонимных объектов.

Когда я сделаю эти запросы в платформе объектов, первый вручит мне назад список результатов, где они - все точно то же.

Второй запрос вручит мне назад данные, где номер аккаунта является тем, который я запросил, и другие значения отличаются. Это, кажется, делает это на на основание номера аккаунта, т.е. если бы я должен был запросить для одного номера аккаунта или другого всего Положения, то объекты для одной учетной записи имели бы то же значение (первый в списке Положений для той учетной записи), и вторая учетная запись будет иметь ряд объектов Положения, что все имели то же значение (снова, первый в, он - список объектов Положения).

Я могу записать SQL, который является в действительности тем же как любым из двух запросов EF. Они оба возвращаются с результатами (скажите четыре), которые показывают корректные данные, один номер аккаунта с различными числами ценных бумаг.

Почему это происходит??? Есть ли что-то, что я мог делать неправильно так, чтобы, если у меня было четыре результата для первого запроса выше этого, данные первой записи также появились в 2-4th's объектах???

Я не могу понять то, что/может вызвать это. Я искал Google все виды ключевых слов и не видел никого с этой проблемой. Мы частичный класс класс Положений для добавленной функциональности (умный объект) и некоторые умные свойства. Существуют даже некоторые конструкторы, которые оказывают некоторую поддержку типа модели представления. Ни одно из этого не вызывается в запросе (я на 99% уверен в этом). Однако мы делаем этот тот же шаблон на всем протяжении приложения.

Единственная вещь, о которой я могу думать, состоит в том, что отображение в EDMX странно. Существует ли способ, которым это произошло бы, если бы "первичные ключи" в EDMX не были на самом деле уникальны, учитывая способ, которым создается представление? Я думаю, что dev, кто импортировал эту модель в EDMX, позволяют разработчику автоматический выбор, что было бы уникально.

Любая справка дала бы haggered dev некоторая надежда!

6
задан Mike G 8 April 2010 в 19:16
поделиться

2 ответа

Ответ на этот конкретный вопрос:

УБЕДИТЕСЬ, ЧТО ВАШИ КЛЮЧИ УНИКАЛЬНЫЕ !!!

Представление, сгенерированное в EDMX, имеет три столбца / свойства, которые были помечены как ключи сущности (которые, как я предполагаю, представляют собой комбинацию создания уникального идентификатора для записи).

В моих запросах все эти три столбца были одинаковыми. Я предполагаю, что структура сущности испугалась и просто поместила первую запись во все последующие записи, пока один из этих столбцов не изменился (таким образом, появился новый уникальный «набор»).

Теперь, когда я понял это, я оглянулся на то место, где эта информация использовалась впервые, и увидел, что сначала был применен оператор группировки (данные запрашиваются через хранимую процедуру в другом месте приложения) . Группа выровняла один из ключевых столбцов объекта так, чтобы он всегда был уникальным. Это приводит к тому, что результаты в этом месте отображаются нормально.

Мое решение - добавить в это представление новый столбец, который просто проецирует GUID (используя NEWID () в SQL). Проблема в том, что я не знаю, как сказать EDMX использовать это недавно добавленное свойство в качестве единственного ключа сущности для отображаемого представления!

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

13
ответ дан 8 December 2019 в 18:34
поделиться

Вы пробовали использовать этот синтаксис? Не могу представить, что это причина, но кто знает ...

using (var dc = new OmsEntityContext())
{
  var la = (from p in dc.Position
  where p.AccountNumber = "12345678"
  select p).ToList();
}

и

using (var dc = new OmsEntityContext())
{
  var deDa = (from p in dc.Position
  where p.AccountNumber = "12345678"
  select new {p.AccountNumber, p.SecurityNumber, p.CUSIP}).ToList();
}

</longShot>
0
ответ дан 8 December 2019 в 18:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: