2017-11-25 1 views
2

reine SQL (in SQLite), ist dies:Conditional Reihenfolge von Wert in SQL-Ausdruck bewirken werden nicht die LINQ Ergebnisse mit SQLite.Net-PCL

select * from Employees order by case WorkDay 
     WHEN 'MON' then 0 
     WHEN 'TUE' then 1 
     WHEN 'WED' then 2 
     WHEN 'THU' then 3 
     WHEN 'FRI' then 4 END 

Ergebnis in einem SQL-Editor ist in Ordnung, und wie erwartet

id| FullName | Department| WorkDay 
7 Frank Bone C Block  MON 
8 Frank Bone D Block  TUE 
6 Frank Bone A Block  FRI 
9 Frank Bone E Block  FRI 

und C# -Code mit SQLite.Net-PCL (Universal Windows-Plattform)

var rows = 
    conn.Query<Employees>("select * from Employees order by case WorkDay 
          WHEN 'MON' then 0 
          WHEN 'TUE' then 1 
          WHEN 'WED' then 2 
          WHEN 'THU' then 3 
          WHEN 'FRI' then 4 END").ToList(); 

     //rows.ForEach(x => { listBox1.Add(x); }); rows appears in wrong/weird order in debug mode. this line not important and not the cause of wrong order. 

Zeilen in einer wei erscheinen rd/falsche Reihenfolge

Ich habe diese Zeilen in einer falschen Reihenfolge. Weißt du, was diese komische Ordnung verursacht?

id| FullName | Department| WorkDay 
6 Frank Bone A Block  FRI 
7 Frank Bone C Block  MON 
9 Frank Bone E Block  FRI 
8 Frank Bone D Block  TUE 

zusätzliche Anmerkung: Modell der Tabellenklasse (? EF)

public class Employees 
{ 

    [PrimaryKey, AutoIncrement] 
    public int id { get; set; } 

    public string FullName { get; set; } 

    [Indexed] 
    public string Department { get; set; } 

    public string WorkDay { get; set; } 
} 

Antwort

1

versuchen, diese

Enum DEFINE und Rest wie unten

[Flags] enum DayEnum { MON=0, TUE= 1, WED= 2, THU= 3, FRI = 4}; 

public class Employees 
{ 
    [PrimaryKey, AutoIncrement] 
    public int id { get; set; } 
    public string FullName { get; set; } 
    [Indexed] 
    public string Department { get; set; } 
    public string WorkDay { get; set ; } 
     public DayEnum DayNO{ get; set; } 
    } 

var employees = conn.Query<Employees>("select * from Employees"); 
var rows = (from e in employees 
      select new Employee() { 
       id =e.id 
       FullName = e.FullName 
       Department = e.Department 
       WorkDay = e.WorkDay 
       DayNO = (DayEnum) Enum.Parse(typeof(DayEnum), e.WorkDay) 
      }).OrderBy(e=>e.DayNO); 
gegeben

Laut Kommentar scheint das Problem mit der Bibliothek auf e Arbeit um ist

neue Eigenschaft

public class Employees 
{ 
    [PrimaryKey, AutoIncrement] 
    public int id { get; set; } 
    public string FullName { get; set; } 
    [Indexed] 
    public string Department { get; set; } 
    public string WorkDay { get; set; } 
    public string WorkDayNo { get; set; } 
} 

tun Abfrage wie diese

var rows = 
    conn.Query<Employees>("select *, (case WorkDay 
           WHEN 'MON' then 0 
           WHEN 'TUE' then 1 
           WHEN 'WED' then 2 
           WHEN 'THU' then 3 
           WHEN 'FRI' then 4 END) as WorkDayNo from Employees").OrderBy(e=> e.WorkDayNo).ToList(); 

WorkDayNo hinzufügen Können Sie bitte Abfrage versuchen unter

select id, FullName, Department,WorkDay from 
(select *, (case WorkDay 
          WHEN 'MON' then 0 
          WHEN 'TUE' then 1 
          WHEN 'WED' then 2 
          WHEN 'THU' then 3 
          WHEN 'FRI' then 4 END) as workdayno from Employees) d order by workdayno 
+0

SQL-Editor Syntax wirft Fehler Herr Pranay. kein "in oder von" irgendwo vor der Unterabfrage? Der SQL-Code in Meine Frage funktioniert wie erwartet in SQLEDITOR. aber in C# Codebehind Reihenfolge Zeilen Ergebnis wurde falsch ordersomehow. –

+0

@KursatTurkay - ich Update-Abfrage können Sie versuchen, dass, ich habe vergessen, END –

+0

> in der Nähe von "select": Syntaxfehler (Im versuchen, Fehler zu finden) –

Verwandte Themen