由于您没有使用 OrderBy
,结果是任意的。
我希望它保留具有最大“OrderId”编号的最后一行
然后使用:
var duplicateRows = db.Orders
.GroupBy(x => x.CustomerId)
.SelectMany(g => g.OrderByDescending(o => OrderId).Skip(1));
using System;
using System.Linq;
public class Program
{
public class O
{
public int CustomerId;
public int OrderId;
public O(int c,int o)
{
CustomerId = c;
OrderId = o;
}
public override string ToString()
{
return string.Format("(C_ID: {0}, O_ID:{1})",CustomerId, OrderId);
}
}
public static void Main()
{
var data = new O[]{ new O(1,1),new O(2,1),new O(3,1),new O(1,2)};
var duplicateRow = (from o in data
group o by new { o.CustomerId } into results
select results.Reverse().Take(1) // reverse and then take 1
).SelectMany(a => a);
foreach( var o in duplicateRow)
Console.WriteLine(o);
Console.ReadLine();
}
}
输出:
(C_ID: 1, O_ID:2)
(C_ID: 2, O_ID:1)
(C_ID: 3, O_ID:1)
这是由于稳定性的原因 - 如果您的输入具有较早的OrderID,则还需要进行OrderBy操作。