[英]Entity framework distinct but not on all columns
我想通过实体框架进行查询,该实体框架将来自两个不同表的联系人合并,按日期删除重复项和订单。 我遇到的问题是围绕不同的日期,使同一联系人看起来很独特。 我不想将日期包括在不重复的日期中,但是以后确实需要订购时使用。 我不能先进行排序,先删除日期,然后再执行非重复操作,因为非重复操作会更改顺序。 我也不能在工会之前订购,因为那不能确保在工会之后订购。
我想区分除日期以外的所有其他字段,日期仅是订购所必需的。
理想情况下,我会将比较器传递给不同的对象,但EF无法将其转换为SQL。
db.Packages.Select(p => new Recent()
{
Name = p.Attention, Address1 = p.Address1, ... , Date = ShippingDate
})
.Concat(db.Letters.Select(l => new Recent()
{
Name = l.AddressedTo, Address1 = p.Address1, ..., Date = MarkedDate
})
.Distinct()
.OrderByDescending(r => r.Date);
或SQL中的问题
SELECT DISTINCT Attention, Address1, ShippingDate
FROM Packages
UNION ALL
SELECT AddressedTo, Address1, MarkedDate
FROM Letters
ORDER BY ShipmentDate DESC
您应该能够使用GroupBy来完成所需的操作,就像这样(更不用说Group By比EF中的Distinct性能更高 ):
db.Packages.Select(p => new Recent()
{
Name = p.Attention, Address1 = p.Address1, ... , Date = ShippingDate})
.Concat(db.Letters.Select(l => new Recent()
{
Name = l.AddressedTo, Address1 = p.Address1, ..., Date = MarkedDate}))
.GroupBy(p => <parameters to group by - which make the record distinct>)
.Select(g => new {Contact = g.Key, LastShippingDate = g.Max(p => p.ShippingDate)});
我会担心这种方法,即使有可能不同,然后删除其中一个项目,并在两个项目中留有随机日期,然后您的排序将完全不可预测。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.