我有一堆(~20个)外部表,我正在为一个应用程序工作。我遇到一个大问题的问题,我认为我已经部分追查了,但我坚持实际的解决方案。 Here是我的edmx的屏幕截图,显示了两个表和关系。
每当我从数据库中选择Socs
时(通过_db.Socs.ToList()
),我希望每个Soc
都有一个OccupationalEmploymentStatistics
的列表。但是,我看到的行为是只有第一 Soc
有OccupationalEmploymentStatistics
(至少通过调试并手动查看返回的841条记录中的大约20条。 841条记录应该有OccupationalEmploymentStatistics
,尽管它是一个可以为空的字段。
当我尝试使用oes
过滤到只是 Socs时,通过这个: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 :(得分:0)
如果您想选择所有没有任何职业就业统计数据的Socs,您可以使用以下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();
如果您想要加载OccupationalEmploymentStatistics集合的所有Socs,您可以使用以下查询:
var query =
from s in _db.Socs
.Include(x => x.OccupationalEmploymentStatistics)
select s;