我试图通过使用SELECT DISTINCT来删除中间人并返回一个List,但我无法使其工作,所以我最终得到所有的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方式来实现它?
答案 0 :(得分:3)
是,Distinct():
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();
}
答案 1 :(得分: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操作,这比从数据库中获取所有数据并在客户端处理它更有效。