2017-02-15 2 views
0

У меня есть куча (~ 20) внешних таблиц, с которыми я работаю для приложения. У меня проблема с большим запросом, который, я думаю, я частично отследил, но я застрял в фактическом решении. Here - скриншот моего edmx, показывающий две таблицы и отношения.Внешние таблицы EntityFramework, не получающие все данные

Всякий раз, когда я выбираю Socs из базы данных (через _db.Socs.ToList()), я ожидаю каждый Soc иметь список OccupationalEmploymentStatistics. Тем не менее, поведение, которое я вижу, заключается в том, что только ПервыйSoc имеет любой OccupationalEmploymentStatistics (по крайней мере, отлаживая и просматривая вручную около 20 из 841 записей. Все 841 записей должны иметь OccupationalEmploymentStatistics, хотя это поле с нулевым значением).

Когда я попытался отфильтровывать в только SOCS с oes, через это: var allSocs = _db.Socs.Where(x => x.OccupationalEmploymentStatistics != null).ToList();, я получаю

Cannot compare elements of type 'System.Collections.Generic.ICollection`1[[MCCDIP.SPA.Data.OccupationalEmploymentStatistic, MCCDIP.SPA.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]'. Only primitive types, enumeration types and entity types are supported. 

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

+0

Предложение where, которое у вас есть, пытается сравнить объект с! = Null. Предложение where может использоваться только против тинов, таких как int и string, следовательно, ошибка примитивных типов, если вы хотите сравнить сравнение с объектом Any, а не там, где – bilpor

+0

Правильно ... Просто понял это. Хорошо, это позаботится, и я, кажется, получаю их сейчас, пока я перечисляю ProfationalEmploymentStatistics. У меня все еще есть эта проблема: http://stackoverflow.com/questions/42249043/entityframework-query-returns-the-same-object-for-relationship –

+0

Вы не упомянули, используете ли вы ленивую загрузку или нет, и из-за отсутствия фрагмента кода я также не знаю, был ли ваш DbContext (_db) удален или нет. – jannagy02

ответ

0

Если вы хотите, чтобы выбрать все SOCS, который не имеет какой-либо OccupationalEmploymentStatistic, вы можете использовать следующий запрос Linq:

var query = 
    from s in _db.Socs 
    join oes in _db.OccupationalEmploymentStatistics on oes.Soc equals s.Soc1 into gj 
    from oes in gj.DefaultIfEmpty() 
    where oes == null 
    select s; 

query = query.Distinct(); 

Если вы хотите, чтобы все SOCS с OccupationalEmploymentStatistics в коллекции загружены вы можете использовать следующий запрос :

var query = 
    from s in _db.Socs 
     .Include(x => x.OccupationalEmploymentStatistics) 
    select s;