SQLite for Windows商店应用程序中的LINQ没有'ThenBy'按多列排序

时间:2013-10-24 10:47:16

标签: linq sqlite c#-4.0 windows-store-apps sqlite-net

我有一个Windows 8商店应用程序,我在SQLite上使用最新版本的数据库。

所以我想从数据库中返回一些记录,我想通过多一列来订购它们。但是SQLite似乎没有ThenBy语句?所以我的LINQ声明如下:

from i in connection.Table<MyTable>()
where i.Type == type 
orderby i.Usage_Counter
// ThenBy i.ID
select i);

那么如何在不执行另一个LINQ语句的情况下按SQLite中的多个列进行排序?

2 个答案:

答案 0 :(得分:2)

您不能使用SQL-Net的LINQ实现按多列排序,因为它没有实现ThenBy

您可以使用Query上的connection方法解决此问题:

var sorted =
    connection.Query<MyTable>(
    "select * from MyTable where Type = ? order by Usage_Counter, ID",
    // you may have to cast to int here...
    type);

另一个选择是使用上面的结果并在其上调用ToList()。然后,您可以按多个值对结果进行排序:

var tables =
from i in connection.Table<MyTable>()
where i.Type == type 
select i;

var tmp = tables.ToList();

var sorted =
from i in tmp
orderby i.Usage_Counter, i.ID
select i;

答案 1 :(得分:0)

使用查询语法时,您只需提供逗号分隔的字段列表以进行排序:

from i in connection.Table<MyTable>()
where i.Type == type 
orderby i.Usage_Counter, i.ID
select i

使用方法语法,您可以使用ThenBy:

connection.Table<MyTable>()
          .Where(i => i.Type == type)
          .OrderBy(i => i.Usage_Counter)
          .ThenBy(i => i.ID)

修改 - 很抱歉在这里成为下载者,但似乎您无法在Windows 8商店应用中使用Entity Framework:Is EntityFramework available for Windows 8 Store Apps?