C# 使用具有Linq匿名类型的ComboBox的SelectedItem属性

C# 使用具有Linq匿名类型的ComboBox的SelectedItem属性,c#,linq,combobox,datasource,anonymous-types,C#,Linq,Combobox,Datasource,Anonymous Types,在C3.5中,使用组合框显示LinQ查询的结果。当LinQ查询返回匿名类型时,如何设置ComboBox的SelectedItem属性 我沿着以下几行设置组合框的数据源: comboBox1.DataSource = from p in db.products select p; comboBox1.DisplayMember = "Name"; comboBox1.ValueMember = "ProductId"; 如果我这样做,我可以通过执行以

在C3.5中,使用组合框显示LinQ查询的结果。当LinQ查询返回匿名类型时,如何设置ComboBox的SelectedItem属性

我沿着以下几行设置组合框的数据源:

comboBox1.DataSource = from p in db.products
                       select p;
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "ProductId";
如果我这样做,我可以通过执行以下操作来选择所选项目:

comboBox1.SelectedItem = (from p in db.products 
                          where p.ProductId = 5 
                          select p).First();
问题是我想用匿名类型结果填充组合框,如:

comboBox1.DataSource = from p in db.products
                       select new
                       {
                           p.ProductId,
                           p.Name
                       };

我实际使用的匿名类型比它更复杂,但它足够解释了。

这应该可以解决问题

var list = (from p in db.products
              select new {
                             p.ProductId,
                             p.Name
                           }).ToList();
comboBox1.DataSource = list;
comboBox1.SelectedItem = list[0];

把它转换成一个列表,然后从中选择一个正确的,怎么样。由于SelectedItem似乎不起作用,您可能需要尝试设置SelectedValue

var productList = (from p in db.products
                   select new {
                      ProductId = p.ProductID,
                      Name = p.Name
                   }).ToList();

comboBox1.DataSource = productList;
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "ProductId";
comboBox1.SelectedValue = 5;

这只会将LinQ查询的第一个结果添加到下拉列表中。我想将所有结果添加到列表中,但在后面选择一个特定的项目。我明白你的意思,给我一点时间,如果你知道列表中的哪条记录是你想要的记录,我会更新答案。如果将selecteditem设置为与加载列表的函数不同的函数,则该选项无效。再次感谢。我刚刚试过,它似乎没有改变所选的项目。它也只有在正确加载时才能工作。所选项目可能在另一个功能中设置。谢谢。您是否尝试将SelectedValue设置为正确的ProductId。我将更新代码。另外,我在选择逻辑中有一个错误。我已经修正了-应该是Where方法而不是Select方法。改变这一点可能会使前面的例子起作用。实际上,这让我在答案上绊倒了。显然,一旦将valuemember属性设置为anon类型中所需字段的名称,只需设置SelectedValue=5即可更改所选项目。确定。我不知道为什么我认为你必须定下名字。