c# - 如何使用 LINQ 从数据库设置自动完成功能?

标签 c# winforms linq autocomplete

我想使用 LINQ 为文本框设置自动完成功能。我已经用 sqlCommands 以一种方式完成了。代码是

  OleDbCommand cmdinst = new OleDbCommand("select distinct cst_City from cstTable", con);
            OleDbDataReader drinst = cmdinst.ExecuteReader();
            AutoCompleteStringCollection instcol = new AutoCompleteStringCollection();
            while (drinst.Read())
            {
                instcol.Add(drinst.GetString(0));
            }
            txtCity.AutoCompleteCustomSource = instcol;

有了这个,我可以将自动完成自定义源添加到文本框。现在我想添加与 LINQ 相同的功能。请任何人帮助我..

最佳答案

将字符串一个一个添加到 AutoCompleteStringCollection 效率不高。因为当添加每个字符串时,如果没有足够的空间容纳新字符串,内部数组列表会确保其容量并调整存储大小(使其大两倍)。此外,每个添加的字符串 CollectionChangedEvent 都会尝试触发。当您通过 AddRange 添加值时,存储仅调整一次大小,并且 CollectionChangedEvent 仅触发一次。

您也可以简单地应用 Distinct 运算符,而不是分组和选择第一组。

var db = FooDataContext();
var cities = db.cstTable.Select(c => c.cst_City).Distinct().ToArray();

AutoCompleteStringCollection instcol = new AutoCompleteStringCollection();
instcol.AddRange(cities);
txtCity.AutoCompleteCustomSource = instcol;

关于c# - 如何使用 LINQ 从数据库设置自动完成功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14230174/

相关文章:

c# - 如何在 C# 中发推文

vb.net - 确定 TabControl 中 TabRow 的高度 (VB.NET)

c# - 月历显示日期为周一至周日

c# - Entity Framework 在判别器上做案例

c# - 如何在 Iron python 中加载用 C++ 编写并用 C# 包装的 DLL?

c# - WP8网络状态-无网络时应用程序崩溃

c# - PostSubmitter 的异步 CTP

c# - 如何查询子对象

c# - 是否有执行 .SelectMany(x => x) 的 Linq 方法?

c# - 使用 TypeWriter 有条件地发出方法