我无法更好地表达我在标题中的要求。
这就是我正在寻找的。
我有一个特定对象的列表,我有DateTime
和String
属性。
字符串属性具有这样的值(请注意,它是字符串,而不是数字,它总是具有K字母,我应该仅以数字订购):
K07000564,
K07070000
K07069914
K07026318
K07019189
我想要的是按日期订购列表...但是当订购字符串值是否存在于集合中的其他日期中,我想在此之后订购它们(同时在idfinders的Minigroup中也是在日期)...然后继续订购...
类似的东西:
编辑
我编辑了该示例,以澄清idfinder的订购将不起作用...我需要按日期订购。如果按日期订购时,idfinder在集合中的出现不止一次,则应在最后一个之后向他们显示,然后继续订购其余部分,依此类推,依此类推
ID Date
**K07000564** Today
K07000562 Yesterday
K07000563 The Day Before Yesterday
**K07000564** The day before the day before yesterday
应该是
K07000564 Today
K07000564 The day before the day before yesterday
K07000562 Yesterday
K07000563 The Day Before Yesterday
我在这样的项目中在SQL Server 2008中实现了这一点:
WITH B
AS
(
SELECT
ID,
MAX(DATE_COLUMN) DATE_COLUMN,
ROW_NUMBER() OVER (ORDER BY MAX(DATE_COLUMN) DESC) RN
FROM MYTABLE
GROUP BY ID
)
SELECT *
FROM MYTABLE c
, B
WHERE ID= b.ID
ORDER BY b.rn, c.DATE_COLUMN desc;
,但我对Linq不好,我不知道在Linq中如何做到这一点。
也许我在.NET 2.0中的重要说明,所以没有Linq可用,但是我使用Linqbridge使用Linq。
我尝试过,但是您会注意到,这将行不通
oList.OrderBy(i => i.IdFinder).ThenByDescending(i => i.OperationDate);
我希望已经清楚地解释了
var result = oList.OrderByDescending(x => x.OperationDate)
.GroupBy(x => x.IdFinder)
.SelectMany(x => x);
我认为这应该可以解决:
var sortedList = oList
.GroupBy(x => x.IdFinder)
.Select(g =>
new
{
MaxOpDate = g.Max(x => x.OperationDate),
Items = g
})
.OrderByDescending(g => g.MaxOpDate)
.SelectMany(g => g.Items.OrderByDescending(x => x.OperationDate));
但是,我尚未使用linqbridge进行测试。
尝试此
oList.OrderBy(i => int.parse(i.IdFinder.Substring(1,i.IdFinder.Length-1)).ThenByDescending(i => i.OperationDate);
首先从IDFinder中提取数字值,该值以下值。
注意 ->假定i.IdFinder
始终是有效的" k ######",其中#的数字小于int32.maxvalue。