0

2 つの異なるテーブルから連絡先を結合し、重複を削除し、日付で注文するエンティティ フレームワークを介してクエリを作成したいと思います。私が抱えている問題は、日付が異なるため、同じ連絡先が一意に表示されることです。個別に日付を含めたくありませんが、後で注文する必要があります。最初に順序付けを行い、日付を削除してから個別に実行することはできません。これは、個別に順序が変更されるためです。組合の後に注文することは保証されないため、組合の前に注文することもできません。

注文にのみ必要な日付以外のすべてのフィールドを区別したいと思います。

理想的には、個別に比較子を渡しますが、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
4

2 に答える 2

2

GroupBy を使用して、次のように、必要なことを実行できるはずです (言うまでもなく、Group By は Distinct の EF よりもパフォーマンスが優れています)。

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)});
于 2013-08-07T17:02:13.760 に答える
1

私はこのアプローチに関心を持っています.distinctがアイテムの1つを削除し、2つのうちのランダムな日付を残す可能性があるとしても、あなたのソートは完全に予測不可能です.

于 2013-08-07T16:46:58.980 に答える