按日期订购List <T>,但它有一个字符串ID,如果该ID在集合中以不同的日期重复,则应显示在其下方

Hec*_*hez 1 .net c# linq asp.net linqbridge

我无法更好地表达我在标题中提出的问题.

这就是我在寻找的东西.

我有一个特定的对象我有一个无序列表DateTimeString属性.

String属性有这样的值(注意它是一个字符串,而不是一个数字,它总是有K字母,我应该只用数字排序):

K07000564, 
K07070000
K07069914
K07026318
K07019189
Run Code Online (Sandbox Code Playgroud)

我想要的是订购List By Date ...但是当订购时,如果String值存在于具有其他Date的集合中,我想在此之后订购它们(By Date也在IdFinders的miniGroup中)......然后继续订购......

像这样的东西:

编辑

我编辑了这个例子来澄清IdFinder的排序是行不通的......我需要按日期订购..如果按日期排序,IdFinder在集合中不止一次出现应该在最后一个之后显示它们,然后每个idfinder继续订购其余的等等

ID         Date
**K07000564**   Today
K07000562   Yesterday
K07000563   The Day Before Yesterday
**K07000564** The day before the day before yesterday
Run Code Online (Sandbox Code Playgroud)

应该

K07000564 Today
K07000564 The day before the day before yesterday
K07000562 Yesterday 
K07000563  The Day Before Yesterday 
Run Code Online (Sandbox Code Playgroud)

我之前在一个项目中在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;
Run Code Online (Sandbox Code Playgroud)

但我对Linq并不擅长,而且我不知道Linq是如何做到这一点的.

也许是一个重要的注意事项我在.Nt 2.0,所以没有LINQ可用,但我正在使用Linqbridge来使用Linq.

我尝试过这个,但是你会注意到,这不起作用

oList.OrderBy(i => i.IdFinder).ThenByDescending(i => i.OperationDate);
Run Code Online (Sandbox Code Playgroud)

我希望能够清楚地解释这一点

I4V*_*I4V 5

var result = oList.OrderByDescending(x => x.OperationDate)
                  .GroupBy(x => x.IdFinder)
                  .SelectMany(x => x);
Run Code Online (Sandbox Code Playgroud)

  • `x.IdFinder`不会被排序.虽然从问题中没有明确说明,但示例显示了这一点. (2认同)