LINQ - 仅对最近的记录进行多个左外连接

LINQ - multiple left outer joins for most recent records only

我有一个样本站点 table,其中有 3 个子 table,每个样本站点可以有多个记录。我需要进行左外连接,这样我仍然可以获得所有示例站点,即使它们并非都具有关联的子记录(table 中的一个现在是空的)。根据我对 SO 所做的一些研究,我这样做了:

SampleSiteDataViewModel viewModel = 
            (from s in db.SAMPLESITES_EVW
            from b in db.BACTERIA_EVW.Where(b => b.FIELDSITEID == fieldSiteId).DefaultIfEmpty()
            from c in db.CHEMISTRY_EVW.Where(c => c.FIELDSITEID == fieldSiteId).DefaultIfEmpty()
            from m in db.MACROS_EVW.Where(m => m.FIELDSITEID == fieldSiteId).DefaultIfEmpty()
            where s.FIELDSITEID == fieldSiteId
            select new SampleSiteDataViewModel
                {
                    MPN_ECOLI = b.MPN_ECOLI,
                    DO_PERCENT = c.DO_PERCENT,
                    PH = c.PH,
                    TDS = c.TDS,
                    TEMP_C = c.TEMP_C,
                    OE = m.OE,
                    DESCRIP = s.DESCRIP
                }).FirstOrDefault();

但是,我意识到如果有多个记录,这不一定是 return 最近的 bacteria/chemistry/macro 记录,因为它不是一对一的关系。所以,我尝试将 .DefaultIfEmpty 替换为 .OrderByDescending(b => b.SAMPLEDATETIME).FirstOrDefault(),但我收到此错误:

"An expression of type 'BACTERIA_EVW' is not allowed in a subsequent from clause in a query expression with source type 'DbSet'. Type inference failed in the call to 'SelectMany'"

我如何才能正确地 select 只显示最近的记录,同时仍然考虑不存在记录的情况?我认为将其分解为多个 linq 查询会更简单,但如果可能,我宁愿在单个数据库调用中进行。

ETA - 这是使用 SQL 服务器中加载的 ESRI 地理数据库,使用 Entity Framework "code first from database" 模型,(我相信)不允许使用该方法的导航属性.

你快到了。

正在替换

.DefaultIfEmpty()

通话
.OrderByDescending(b => b.SAMPLEDATETIME).FirstOrDefault()

很好。但是它把结果类型从sequence变成了single item,所以你还需要把对应的from关键字换成let关键字就大功告成了。