我需要过滤这些结果,只显示每组的第一行和最后一行。我尝试了几种没有运气的方法。以下是Linq查询和结果。
Linq查询:
var currentAndHistoricalOnly = ViewCustomerGLAndPurchaseRecord
.Where(g=>g.CashierDate > new Datetime(2012,10,01)
&& g.CashierDate < new DateTime(2012,12,01))
.GroupBy(x => x.TransactionId)
.OrderByDescending(d => d.First().CashierDate);
请记住,我正在尝试保持相同的分组,但过滤(删除记录)每个组,并只采用每个组的第一个记录和最后一个记录。
所以而不是:
第1组:
第2组:
我需要:
第1组:
第2组:
答案 0 :(得分:1)
也许是这样的:
var currentAndHistoricalOnly = ViewCustomerGLAndPurchaseRecord
.Where(g=>g.CashierDate > new DateTime(2012,10,01) && g.CashierDate < new DateTime(2012,12,01))
.GroupBy(x => x.TransactionId)
.Select(g=> new {
Last = g.OrderByDescending(c=>c.CashierDate).FirstOrDefault(),
First = g.OrderBy(c=>c.CashierDate).FirstOrDefault(),
})
.ToList();
答案 1 :(得分:0)
答案 2 :(得分:0)
请改为尝试:
var list = ViewCustomerGLAndPurchaseRecord
.Where(g=>g.CashierDate > new DateTime(2012,10,01)
&& g.CashierDate < new DateTime(2012,12,01))
.GroupBy(x => x.TransactionId)
.OrderByDescending(d => d.First().CashierDate)
.Select(d =>
{
var result = new List<ViewCustomerGLAndPurchaseRecord>();
result.Add(d.FirstOrDefault());
result.Add(d.LastOrDefault());
return result;
});
如果您使用的是Entity Framework,请在选择之前使用 AsEnumerable() 。
希望这会有所帮助!!