直接用LINQ查询的结果填充组合框

本文关键字:结果 填充 组合 查询 LINQ | 更新日期: 2023-09-27 18:06:48

我是c#/.net/wpf的新手。

我正在尝试填充从数据库中获取的值的组合框。

LINQ查询获取数据库中所有公司的列表,代码尝试用该列表填充ComboBox控件。

下面的c#代码成功地获得了结果(我之前用MessageBox.Show()输出了结果)。

我的下一步是删除那个位,取而代之的是放入填充这个ComboBox的代码:

<ComboBox Name="companyComboBox"/>
c#:

    using System;
    using System.Collections;
    using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Data.SqlClient;
using System.Data.Linq;
using System.Data.Linq.Mapping;
namespace LeadSystem
{
    /// <summary>
    /// Interaction logic for NewLead.xaml
    /// </summary>
    public partial class NewLead : Window
    {
    public NewLead()
    {

       // Use a connection string.
        DataContext db = new DataContext("Data Source=HP''SQLEXPRESS;Initial Catalog=LeadSystem;Integrated Security=True");
        // Get a typed table to run queries.
        Table<Company> Companies = db.GetTable<Company>();
        // Attach the log to show generated SQL.
        db.Log = Console.Out;
        // Query for all companies.
        var companyQuery = 
            from c in Companies
            select new { Name = c.CompanyName, ID = c.CompanyID };
        companyComboBox.ItemsSource = companyQuery.ToList();
        companyComboBox.DisplayMemberPath = "Name";
        companyComboBox.SelectedValuePath = "ID";
        InitializeComponent();
    }
}
}

我一直遇到的问题是:

Object reference not set to an instance of an object.

^它正在谈论companyQuery,我试图用它来填充comboBox。

我想这一定是因为延迟执行,所以我在网上找了一个解决方案。我曾见过一些人说要在那行代码的末尾添加ToList(),但是没有任何改变。

那么,这里有人知道我做错了什么吗??

我已经环顾了整个网络(包括Stackoverflow),没有什么能帮助我解决我的问题。

还有,如果一次问两个问题不太厚颜无耻的话…如何在组合框中设置所选值和显示值?我已经拥有的方式对吗?

谢谢

直接用LINQ查询的结果填充组合框

尝试在initializeComponent之后填充companyComboBox

 InitializeComponent();
    companyComboBox.ItemsSource = companyQuery.ToList();
    companyComboBox.DisplayMemberPath = "Name";
    companyComboBox.SelectedValuePath = "ID";

InitializeComponent();置于itemSource之前