【问题标题】:filling combo box using LINQ query (distinct)使用 LINQ 查询填充组合框(不同)
【发布时间】:2015-05-04 15:44:46
【问题描述】:

我有一个名为“cmbModel”的组合我想用表中的两个不同值填充数据库。 这就是我所做的:

private void Form1_Load(object sender, EventArgs e)
        {
            using (LINQSQLDataContext db = new LINQSQLDataContext())
            {
                cmbModel.DisplayMember = "szModel";
                cmbModel.DataSource = db.VehEcus.ToList<VehEcu>();
            }
        }

这将用我的表的 szModel 列填充我的 cmbModel 但我想避免重复,我如何在查询中使用“distinct”来实现我的目标? 我还想在我的组合框中显示我的表中的 2 项,例如“modelID-szModel

谢谢

【问题讨论】:

  • “而且我想在我的组合框中显示我的表格中的 2 个项目,例如“modelID-szModel””你必须更好地解释这一点。
  • 我的意思是目前我只能在我的组合框中显示 szModel 但我有另一列 (modelId) 我想在组合框中以这种格式 (modelId-szModel) 显示 modelId 和 szModel

标签: c# linq combobox distinct


【解决方案1】:

如果您只想显示单个列,您可以选择该列并使用Distinct

cmbModel.DataSource = db.InfoProg_VehEcus.Select(x => x.szModel).Distinct();

【讨论】:

  • 亲爱的蒂姆,谢谢,它可以工作,但如果我想拥有像 (modelId-szModel) 这样的东西,我该怎么写呢? sth like (y => y.lModelId x => x.szModel)
  • 您可以在 Select 中使用任何字符串方法,例如String.Format 如果你想连接两列。
  • (x =&gt; x.IModelId + "-" + x.szModel)
【解决方案2】:

您可以在查询后的任何时候应用 Distinct()。我建议您在枚举之前执行此操作。

要创建自定义 modelID-szModel 字段,您可以使用 AsEnumerable() 枚举查询,然后创建一个匿名类型并使用 String.Format 将您的值连接到新字段中。

        using (LINQSQLDataContext c = new LINQSQLDataContext ())
        {
            var items = c.VehEcus.Select(t => new
            {
                a = t.szModel,
                b = t.modelID
            }).Distinct()
            .AsEnumerable().Select(t => new
            {
                displayMember = String.Format("{0}-{1}", t.a, t.b)
            });

            cmbModel.DisplayMember = "displayMember";
            cmbModel.DataSource = items.ToList();
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多