2013-08-07 27 views
0

我有一个名为ProjectVersion模型,它具有以下特性:订货与LINQ to SQL的C#.NET WCF

 
    int Major 
    int Minor 
    int Patch 
    int? Revision 
    string PreRelease 
    string MetaData 

现在我想根据Semantic Versioning 2.0.0 specification订购降序版本,其中优先级为Major > Minor > Patch > PreRelease

我还使用实体框架和LINQ得到我的数据,这里是我目前使用的代码:

注:所有小于“<”和大于‘>’迹象下面的代码被替换为管道'|'由于我对stackoverblow没有经验。

 
public List|ProjectVersionDataContract| GetProjectVersions(int projectId) 
     { 
      // TODO: Evaluate Versioning system and order list according to it's specification. 
      var versions = new List|ProjectVersionDataContract|(); 
      using (var context = new Entities()) 
      { 
       var vers = context.ProjectVersions.Where(v => v.ProjectId == projectId) 
        .OrderBy(v => v.MajorVersion) 
        .ThenBy(v => v.MinorVersion) 
        .ThenBy(v => v.PatchVersion) 
        .ThenBy(v => v.RevisionVersion) 
        .ThenBy(v => v.PreReleaseVersion).ToList(); 

       // This uses the AutoMapper package to map the Data Object to the Data Contract 
       versions.AddRange(vers.Select(Mapper.Map|ProjectVersion, ProjectVersionDataContract|)); 
      } 

      return versions; 
     } 

现在得到的是我的数据,但是它首先返回最低(最老)的版本,这与我想要的相反。我甚至尝试将.OrderBy()更改为OrderByDescending(),没有任何区别。这是一个WCF服务,如果这有什么区别。

+0

你能不能.Reverse()它 – Jonesopolis

+0

没有意识到这是一个功能,我会尝试,让你知道。 – Oxymoron

+0

更新查询以'VAR VERS = context.ProjectVersions.Where(V => v.ProjectId ==专案编号) .OrderBy(V => v.MajorVersion) .ThenBy(V => v.MinorVersion) .ThenBy (v => v.PatchVersion) 。ThenBy(v => v.RevisionVersion) 。ThenBy(v => v.PreReleaseVersion).Reverse()。ToList();'得到以下结果: – Oxymoron

回答

0

尝试

var vers = context.ProjectVersions.Where(v => v.ProjectId == projectId) 
        .OrderByDescending(v => v.MajorVersion) 
        .ThenByDescending(v => v.MinorVersion) 
        .ThenByDescending(v => v.PatchVersion) 
        .ThenByDescending(v => v.RevisionVersion) 
        .ThenByDescending(v => v.PreReleaseVersion).ToList(); 

或者你可以做如下

var normal = GetProjectVersions(idval); 
var finalResult =normal.Reverse(); 
+0

我做了最后一个。效果很好。感谢您的答复。 – Oxymoron