EF中左连接

项目中遇到一个问题,就是两张表需要做链接,但关键字不是主键,另一个表的数据不是唯一的,所以需要按照时间排序取到最后时间的那一条数据。

var InfoList = db.PrintInfo.OrderByDescending(c => c.Datetime).GroupBy(c => c.ph).Select(groups => new { FirstOrDefault = groups.FirstOrDefault()}).ToList();

然后在进行左连接

 var user = (from u in ListA
                        join uw in InfoList on u.Number.Trim() + u.TicketNO.Trim() equals uw.FirstOrDefault.ph.Trim() into uwt                        
                        from uwti in uwt.DefaultIfEmpty() // 变成left join
                        select new{
                           ID=u.id,
                            Status = uwti != null ? (!string.IsNullOrEmpty(uwti.FirstOrDefault.Status) ? uwti.FirstOrDefault.Status : "") : "",
                        } .ToList();               

这样选出来就是两张表的链接了。

因为使用原来的ED方法,从另一个表里

 var List = PrintInfo.Where(n => n.ph.Trim() == reList[i].Number + reList[i].TicketNO).OrderByDescending(n => n.Datetime).Take(1).ToList();

这样一个一个选择比较慢,所以进行了优化。特此记录

原文地址:https://www.cnblogs.com/Lvkang/p/11683707.html