1

SELECT DISTINCT ...を使用してリストを返すことで仲介者を切り出そうとしましたが、それを機能させることができなかったため、すべての値を取得して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<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 に答える
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();
}
于 2012-12-09T03:53:27.640 に答える