2017-02-15 21 views
0

私はアプリケーションのために働いている束(〜20)の外部テーブルを持っています。私は大規模なクエリで問題が発生している、私は部分的にトレースしたと思うが、私は実際のソリューションに固執しています。 Hereはmy edmxのスクリーンショットで、2つのテーブルとその関係を示しています。私は(_db.Socs.ToList()経由)データベースからSocsを選択するたびにEntityFramework外部テーブルがすべてのデータを取得していません

、私はOccupationalEmploymentStatisticsのリストを持っている各Socを期待しています。しかし、私が見ている動作は、の最初のSocのいずれかがOccupationalEmploymentStatisticsであることです(少なくとも841のレコードのうち、デバッグして約20個を手動で探して、すべての841レコードはNULL可能なフィールドですが、OccupationalEmploymentStatisticsである必要があります)。

私はこれを経由して、oesとだけのSoCを絞り込むしようとすると: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. 

を取得します。あなたはすべてのSoCをしたい場合は、収集OccupationalEmploymentStatisticsでは、次のクエリを使用することができますロードで

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(); 

:あなたはどんなOccupationalEmploymentStatisticを持っていないすべてのSoCを選択したい場合

+0

where句は、オブジェクトを!= nullと比較しようとしています。 where句はintやstringのようにしか使えないので、プリミティブ型のエラーは、オブジェクトを比較したいときはAnyの代わりにAnyを使います。Where – bilpor

+0

Right ...それを分かりました。さて、それは世話をしています。私はOccupationalEmploymentStatisticsを列挙している限り、今はそれらを手に入れているようです。私はまだこの問題を抱えています:http://stackoverflow.com/questions/42249043/entityframework-query-returns-the-same-object-for-relationship –

+0

あなたはレイジーローディングを使用するかどうかは言及していません。コードスニペットがないため、DbContext(_db)が破棄されているかどうかわかりません。 – jannagy02

答えて

0

は、次のLINQクエリを使用することができます:

var query = 
    from s in _db.Socs 
     .Include(x => x.OccupationalEmploymentStatistics) 
    select s; 
関連する問題