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();
这样一个一个选择比较慢,所以进行了优化。特此记录