如何通过单查询实现Dictionary与Word表左连接并统计词数?
单查询实现词典与单词表的左连接及统计需求
现有数据库表
Dictionary表
| ID | Name |
|---|---|
| 1 | English |
| 2 | Italian |
Word表(通过DictionaryID关联Dictionary表)
| ID | DictionaryId | Word |
|---|---|---|
| 1 | 1 | A |
| 2 | 1 | B |
| 3 | 2 | C |
需求说明
通过一次查询实现Dictionary与Word表的左连接,返回Dictionary表的所有字段,同时将Word表中对应词典的行数统计值存入名为WordNumber的字段。对应的实体类定义如下:
public class Dictionary { public long ID { get; set; } [Collation("NOCASE")] public string Name { get; set; } [Ignore] public long WordNumber { get; set; } }
现有实现及问题
目前已实现两个独立函数:
- 基于文本搜索返回词典列表的函数:
public async Task<List<Dictionary>> GetDictionariesForSearchAsync(string search) { await Init(); return await Database.Table<Dictionary>() .Where(w => w.Name.ToLower().Contains(search.ToLower())) .ToListAsync(); }
- 单独统计每个词典对应单词数量的函数:
public async Task<long> GetRecordNumberForDictionary(long id) { long num = await Database.Table<Word>().Where(i => i.DictionaryId == id).CountAsync(); return num; }
但这种方式存在重复查询的问题,单查询的效率更高。尝试寻找类似GroupBy的分组统计方法未果,参考William的代码后有了相关思路,现寻求单查询的解决方案。
内容的提问来源于stack exchange,提问作者Enrico
相关产品推荐
相关产品推荐

