2016-04-25 7 views
0

anzuzeigen Ich möchte Reihenfolge absteigend in LINQ mit Webdienst anzeigen, und ich habe eine LINQ Abfrage, die ich bis zur zuletzt erstellten Zeit bestellen möchte., wie Reihenfolge in absteigend in LinQ

Meine Web-Service Hier (GetContent.asmx.cs):

[WebMethod] 
public string[] GetContentText(string NamaPage, string TanggalAkses, string key) 
{ 
    string[] ret = new string[4] { null, null, null, null }; 

    if (clsEncrypt.DecodeFrom64(key) == TanggalAkses) 
    { 

     FrontEndContent dt = db.FrontEndContent.FirstOrDefault(m => m.NamaPage.ToLower() == NamaPage.ToLower().OrderByDescending(m => m.CreatedTime.ToList()); 
     //List<FrontEndContent> dt = db.FrontEndContent.OrderByDescending(m => new { m.CreatedTime }).ToList(); 

     if (dt != null) 
     { 
      ret[0] = dt.Id.ToString(); 
      ret[1] = dt.HeaderText; 
      if (String.IsNullOrEmpty(ret[1])) 
      { 
       ret[1] = ""; 
      } 
      ret[2] = dt.SubHeaderText; 
      if (String.IsNullOrEmpty(ret[1])) 
      { 
       ret[2] = ""; 
      } 
      ret[3] = dt.ContentText; 
      if (String.IsNullOrEmpty(ret[1])) 
      { 
       ret[3] = ""; 
      } 
     } 
    } 
    return ret; 
} 

Und mein Modell hier:

using System; 
using System.Linq; 
using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 
using System.Web; 
using System.Web.Mvc; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations.Schema; 

namespace penerimaan.Models 
{ 
    public class FrontEndContent 
    { 
     private ModelEntities db = new ModelEntities(); 

     [Key] 
     [DisplayName("ID")] 
     [ScaffoldColumn(false)] 
     public int Id { get; set; } 

     [Required(ErrorMessage = "Nama Page is Required")] 
     [DisplayName("Nama Page")] 
     [StringLength(110)] 
     public string NamaPage { get; set; } 

     [DisplayName("Header Text")] 
     [StringLength(110)] 
     public string HeaderText { get; set; } 

     [DisplayName("Sub Header Text")] 
     [StringLength(110)] 
     public string SubHeaderText { get; set; } 

     [DisplayName("Content")] 
     [StringLength(10000)] 
     [AllowHtml] 
     public string ContentText { get; set; } 

     [DisplayName("Created Time")] 
     public System.DateTime? CreatedTime { get; set; } 

     [DisplayName("Updated Time")] 
     public System.DateTime? UpdatedTime { get; set; } 

     [DisplayName("Created By")] 
     public int? CreatedBy_Id { get; set; } 

     [DisplayName("Updated By")] 
     public int? UpdatedBy_Id { get; set; } 


     public IEnumerable<FrontEndContent> SelectData() 
     { 
      List<FrontEndContent> lst = new List<FrontEndContent>(); 

      lst = db.FrontEndContent.OrderByDescending(m => new { m.NamaPage }).ToList(); 
      lst = db.FrontEndContent.OrderByDescending(m => new { m.CreatedTime }).ToList(); 

      return lst; 
     } 

    } 
} 

aber das gibt einen Fehler:

'char' enthält keine Definition für 'CreatedTime' und es konnte keine Erweiterungsmethode 'CreatedTime' gefunden werden, die ein erstes Argument vom Typ 'char' akzeptiert (fehlt ein using di ? Rective oder eine Baugruppe Referenz)

+1

Nicht für String bestellen. Bestellung für Sammlungen. Verwenden Sie "FrontEndContent dt = db.FrontEndContent.Where" (m => m.NamaPage.ToLower() == NamaPage.ToLower()). OrderByDescending (m => m.CreatedTime.ToList()). FirstOfDefault(); ' – Bikee

Antwort

0

Verwenden Sie stattdessen:

FrontEndContent dt = db.FrontEndContent.Where(m => m.NamaPage.ToLower() == NamaPage.ToLower()).OrderByDescending(m => m.CreatedTime).FirstOfDefault(); 
+0

Ich denke, dieser Code wird nicht kompiliert, weil Sie die ToList() -Methode über die CreatedTime-Eigenschaft aufrufen. Vielleicht müssen Sie es nach der geschlossenen Klammer nennen. Daher ist es überflüssig, ToList() zu verwenden, wenn Sie danach FirstOrDefault() aufrufen. –

3

Warum Sie das neue Schlüsselwort verwenden, wenn Sie bestellen? Du musst das nicht tun. Das sollte gut funktionieren.

List<FrontEndContent> lst = new List<FrontEndContent>(); 
     lst = db.FrontEndContent.OrderByDescending(m => m.NamaPage).ToList(); 
     lst = db.FrontEndContent.OrderByDescending(m => m.CreatedTime).ToList(); 
     return lst; 
1

Der Fehler, den Sie haben, kann behoben werden, indem Sie new Schlüsselwort im Prädikat nicht verwenden.

List<FrontEndContent> lst = new List<FrontEndContent>(); 
lst = db.FrontEndContent.OrderByDescending(m => m.NamaPage).ToList(); 
lst = db.FrontEndContent.OrderByDescending(m => m.CreatedTime).ToList(); 
return lst; 

Aber das ist immer noch nicht richtig, wenn Sie den Code oben schauen, sehen Sie nur die FrontEndContent bekam die absteigend nach CreatedTime bestellt wird, weil Sie die lst in der dritten Zeile überschrieben.

Um mehrere Felder zu bestellen, müssen Sie die Methode ThenBy verwenden.

List<FrontEndContent> lst = new List<FrontEndContent>(); 
lst = db.FrontEndContent.OrderByDescending(m => m.NamaPage).ThenByDescending(m => m.CreatedTime).ToList(); 
return lst; 

Auf Ihrem WebService, verpassten Sie eine PARENTESIS und ToList Methode sollte auch nach dem Sortiervorgang sein.

FrontEndContent dt = db.FrontEndContent.Where(m => m.NamaPage.ToLower() == NamaPage.ToLower()).OrderByDescending(m => m.CreatedTime).ToList(); 
Verwandte Themen