C# r跨项目是一个问题,因为历史记录表中上次更新的排序不准确。我不理解为什么上次更新的排序不准确。如果我在5月1日、5月10日和5月20日更新项目,我应该有一份5月20日的项目记录和两份5月10日和5月1日的项目历史记录。否?@phoog-根据排序顺序在单个项

C# r跨项目是一个问题,因为历史记录表中上次更新的排序不准确。我不理解为什么上次更新的排序不准确。如果我在5月1日、5月10日和5月20日更新项目,我应该有一份5月20日的项目记录和两份5月10日和5月1日的项目历史记录。否?@phoog-根据排序顺序在单个项,c#,sql-server,linq,triggers,audit-trail,C#,Sql Server,Linq,Triggers,Audit Trail,r跨项目是一个问题,因为历史记录表中上次更新的排序不准确。我不理解为什么上次更新的排序不准确。如果我在5月1日、5月10日和5月20日更新项目,我应该有一份5月20日的项目记录和两份5月10日和5月1日的项目历史记录。否?@phoog-根据排序顺序在单个项目中对该字段进行排序是正确的,但要在多个项目中获得正确的更改顺序,该字段不准确,因为上次更新的字段(因为触发器是上一次更改的最后一次更新,所以您可能会得到错误的更改发生时间顺序。我想我可能需要在历史记录表中存储一个新字段,该字段在输入记录时映射


r跨项目是一个问题,因为历史记录表中上次更新的排序不准确。我不理解为什么上次更新的排序不准确。如果我在5月1日、5月10日和5月20日更新项目,我应该有一份5月20日的项目记录和两份5月10日和5月1日的项目历史记录。否?@phoog-根据排序顺序在单个项目中对该字段进行排序是正确的,但要在多个项目中获得正确的更改顺序,该字段不准确,因为上次更新的字段(因为触发器是上一次更改的最后一次更新,所以您可能会得到错误的更改发生时间顺序。我想我可能需要在历史记录表中存储一个新字段,该字段在输入记录时映射到该字段。但是您的代码首先按项目ID排序,然后按日期排序,这应该可以解释。要我的例子是:我有另一个项目,我在5月5日、5月15日和5月25日更新了。然后使用LU进行最后更新,我的项目记录应该是(ID=1,LU=20 May)和(ID=2,LU=25 May),我的历史记录是(ID=1,LU=1 May),(ID=1,LU=10 May),(ID=2,LU=5 May),(ID=2,LU=15 May)。您能澄清一下吗,我不知道这是如何解决上述问题的。@ooo-除非我遗漏了您的一些要求,否则您能按Projectd然后按LastUpdate从vwProjectHistory顺序中选择记录吗?
 ALTER TRIGGER ProjectTrigger
 ON Project
 AFTER UPDATE
 AS
    SET NOCOUNT ON

    insert into ProjectHistory
    select * from deleted
   public IEnumerable<Project> GetHistory<Project, ProjectHistory>(int numberOfChanges)
    {
        IEnumerable<Project> current;
        IEnumerable<Project> history;
            current = Session.Query<Project>()
                .OrderByDescending(r => r.LastUpdated)
                .Take(numberOfChanges);

             history = Session.Query<ProjectHistory>()
            .OrderByDescending(r => r.LastUpdated).Cast<Project>();

            IEnumerable<Project> all = current.Concat(history);
            return all.OrderByDescending(r => r.Id).ThenByDescending(r => r.LastUpdated);
        }
    } 
CREATE view [dbo].[VwProjectHistory] as select
    OtherFieldName,
    LastUpdated
from
    [dbo].[Project]

union all

select
    OtherFieldName,
    LastUpdated
from
    [dbo].[ProjectHistory]
// The last row in your question, 0 means start from the start of byte[]
return all.OrderByDescending(r => BitConverter.ToInt64(r.Timestamp,0));