如何从这个SQLite操作中修剪掉脂肪?

时间:2012-12-09 03:46:42

标签: c# linq sqlite linq-to-sql

我试图通过使用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方式来实现它?

2 个答案:

答案 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操作,这比从数据库中获取所有数据并在客户端处理它更有效。