使用此代码(带有或不带有“.ToList()”):
public async Task<List<String>> SelectDistinctGroupNames()
{
var db = new SQLiteAsyncConnection(SQLitePath);
var groupNames = await db.QueryAsync<List<string>>("SELECT DISTINCT GroupName FROM SOs_Locations");
return groupNames.ToList();
}
...我明白了,“无法将类型 'System.Collections.Generic.List>' 隐式转换为 'System.Collections.Generic.List' ”
这有效:
public async Task<HashSet<String>> SelectDistinctGroupNames()
{
var db = new SQLiteAsyncConnection(SQLitePath);
var allLocations = await db.QueryAsync<SOs_Locations>("SELECT * FROM SOs_Locations ORDER BY GroupName");
HashSet<string> hashsetGroupNames = null;
foreach (var item in allLocations)
{
hashsetGroupNames.Add(item.GroupName);
}
return hashsetGroupNames;
}
...但似乎很浪费(当我想要的只是 GroupName 列中的不同值时,获取所有记录)。
在我看来,当用“DISTINCT GroupName”替换 sql 查询中的“*”时,需要一个 List 甚至是 HashSet
那么,当返回多条记录中的一列时,究竟返回了什么?IOW,调用 QueryAsync<>() 的尖括号内应该是什么?
我认为这会起作用:
public async Task<List<String>> SelectDistinctGroupNames()
{
var db = new SQLiteAsyncConnection(SQLitePath);
List<string> allLocations = await db.QueryAsync<string>("SELECT DISTINCT GroupName FROM SOs_Locations ORDER BY GroupName");
return allLocations;
}
...但是我得到了,“ 'string' 必须是具有公共无参数构造函数的非抽象类型,才能将其用作泛型类型或方法 'SQLite.SQLiteAsyncConnection.QueryAsync(string,参数对象[])' "
我上面有一个“字符串”与该方法的工作版本中的<SOs_Locations
> (不是“List >”)相对应。<SOs_Locations
当我将其更改为“列表<string
>”时,我得到“无法将类型'System.Collections.Generic.List <System.Collections.Generic.List
'隐式转换为'System.Collections.Generic.List <string
>'”