c# - 带有连接子句的 linq 中的不同值

标签 c# linq join

我有这种类型的代码。在 Material 表中它只有一个 MaterialId。但是在Report表中可以有多个MaterialId行。(一个materialId在Report表中可以有多个行)。

但是在 Material 表中我没有任何时间戳。但是在 Report 中有一列作为 TimeStamp,我想用它来获取最新的。

我现在只想要 ReportAdminModel 的不同值。

但是我怎样才能让它像那样工作呢?
我试过 Distinct() 但这不起作用。

list = (from material in db.Material
                        join reports in db.Report on material.MaterialId equals reports.MaterialId
                        select new ReportAdminModel
                        { MaterialId = material.MaterialId, MaterialStatus = material.ProcessApprovalStatus, FlowIndex = material.FlowIndex, ActualStartTime = reports.Timestamp })
                        .OrderByDescending(x => x.ActualStartTime).Take(item.NumberOfRows.Value).ToList();

最佳答案

如果我理解正确,试试这个:

list = (from material in db.Material
                join reports in (from rep in db.Report
                                 group rep by rep.MaterialId into grp
                                 let latestTimeStamp = grp.Max(o => o.Timestamp)
                                 select new
                                 {
                                     MaterialId = grp.Key,
                                     Timestamp = latestTimeStamp,
                                     //if you need any other field, just do something like :
                                     //SomeField = grp.Where(o => o.Timestamp == latestTimeStamp).Select(o => o.SomeField).FirstOrDefault();
                                 })    
                on material.MaterialId equals reports.MaterialId
                select new ReportAdminModel
                {MaterialId = material.MaterialId, 
                 MaterialStatus = material.ProcessApprovalStatus, 
                 FlowIndex = material.FlowIndex, 
                 ActualStartTime = reports.Timestamp, 
                }).OrderByDescending(x => x.ActualStartTime).ToList();

关于c# - 带有连接子句的 linq 中的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48440702/

相关文章:

c# - 将一个值与排序字典中的下一个值进行比较

c# - 可以同时阅读字典吗?

linq - 如何使用 linq 简化数字范围的生成?

javascript - 在数组中以编程方式在节点内插入节点

c# - OrderBy 可以为一个元素多次评估委托(delegate)吗?

linq - 最小起订量和回调以设置类的值

php - 两个 SELECT/WHERE 子句组合在一起?

mysql - INNER JOIN ON IF 语句?

python - 两个表之间的非标准交互以避免非常大的合并

c# - 如何使用 EF 核心在 SQLite 中创建自动增量列?