按日期对列表进行排序,<T>但它有一个字符串 ID,如果该 ID 在集合中以不同的日期重复,则应出现在它的下方



我无法更好地表达我在标题中的要求。

这就是我正在寻找的。

我有一个特定对象的列表,我有DateTimeString属性。

字符串属性具有这样的值(请注意,它是字符串,而不是数字,它总是具有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。

相关内容

  • 没有找到相关文章

最新更新