繁体   English   中英

实体框架不同,但并非在所有列上都一样

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM