2017-11-25 154 views
2

纯SQL(在源码)是这不会实现LINQ结果:条件订货通过价值SQL表达式中使用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 

结果在SQL编辑器是好的和如预期

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 

和使用C#代码SQLite.Net-PCL(通用Windows平台)

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. 

行出现在一个卫rd /错误的顺序

我得到这个行的顺序错误。你知道这个奇怪的命令是什么原因吗?

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 

额外注:表类的模型(?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; } 
} 

回答

1

试试这个

限定枚举,而下面

[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); 

给出做休息按照你的评论似乎像图书馆的问题,在Ë解决办法是

增加新属性WorkDayNo

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; } 
} 

做这样的查询

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(); 

能否请您尝试查询,如下

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编辑器抛出语法错误Pranay先生。在子查询之前的某处没有“in或from”?按照预期,我的问题中的sql代码在sqleditor中工作。但在C#代码隐藏顺序行结果成为错误orderomehow。 –

+0

@KursatTurkay - 我更新的查询可以请你试试,我忘了包括END –

+0

>在“select”附近:语法错误(我试图找到错误) –