使用LINQ查询结果直接填充ComboBox

Dan*_*an. 4 c# linq wpf combobox

我是c#/.net/WPF的新手.

我正在尝试使用从数据库中获取的值来填充组合框.

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

下面的C#代码成功获得结果(我以前使用MessageBox.Show()输出它).

我的下一步是删除该位,而是输入将填充此ComboBox的代码:

<ComboBox Name="companyComboBox"/>
Run Code Online (Sandbox Code Playgroud)

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();

    }
}
}
Run Code Online (Sandbox Code Playgroud)

我一直遇到的问题是:

Object reference not set to an instance of an object.
Run Code Online (Sandbox Code Playgroud)

^它在谈论companyQuery,我尝试用它来填充comboBox.

我认为这必须是因为延迟执行,所以我浏览了一下网络以找到解决方案.我见过几个人说要在那行代码的末尾添加ToList(),但没有任何改变.

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

我浏览了网页(包括Stackoverflow),没有任何东西可以帮助我解决我的问题.

另外,如果一次性问两个问题并不太厚颜无耻......如何在我的ComboBox中设置所选值和显示值?它是否正确,我已经拥有它的方式?

谢谢

Chi*_*ino 6

尝试在initializeComponent之后填充companyComboBox

 InitializeComponent();
    companyComboBox.ItemsSource = companyQuery.ToList();
    companyComboBox.DisplayMemberPath = "Name";
    companyComboBox.SelectedValuePath = "ID";
Run Code Online (Sandbox Code Playgroud)