1

我试图通过使用 SELECT DISTINCT ... 并返回一个列表来切断中间人,但我无法让它工作,所以我最终得到了所有的 val,然后将它们放入一个 HashSet 中,这将忽略/不接受重复值:

public async Task<HashSet<String>> SelectDistinctGroupNames()
{
    var db = new SQLiteAsyncConnection(SQLitePath);
    var allLocations = await db.QueryAsync<SOs_Locations>("SELECT * FROM SOs_Locations");
    HashSet<string> hashsetGroupNames = null;
    foreach (var item in allLocations)
    {
        hashsetGroupNames.Add(item.GroupName);
    }
    return hashsetGroupNames;
}

肯定有更好的办法; 有人知道吗?也许是一种 LINQ 方式来完成它?

4

2 回答 2

3

是的,不同的():

public async Task<IEnumerable<String>> SelectDistinctGroupNames()
{
    var db = new SQLiteAsyncConnection(SQLitePath);
    var allLocations = await db.QueryAsync<SOs_Locations>("SELECT * FROM SOs_Locations");
    return allLocations.Select(x=>x.GroupName).Distinct();
}
于 2012-12-09T03:53:27.640 回答
3

像这样的东西怎么样:

public async Task<List<String>> SelectDistinctGroupNames()
{
    var db = new SQLiteAsyncConnection(SQLitePath);
    var groupNames = await db.QueryAsync<string>("SELECT DISTINCT GroupName FROM SOs_Locations");
    return groupNames.ToList();
}

这将在数​​据库端执行 Distinct 操作,这比从数据库中获取所有数据并在客户端处理它要高效得多。

于 2012-12-09T04:04:48.653 回答