LINQ查询结果转换为列表

3
我有一个名为Name的类,拥有一个属性。
public class Name
{
    public string comboName { get; set; }
}

我试图运行一个LINQ查询来返回所有的FullName,然后为每个创建一个Name类的实例,将FullName分配给属性comboName。这些实例被添加到一个List中,然后我希望List值被添加到ComboBox1下拉框中。以下是我目前编写的代码。
void ComboBox1_Loaded(object sender, RoutedEventArgs e)
{
    GiftIdeasDataContext dc = new GiftIdeasDataContext();

    var qry = from r in dc.Recipients
                select new Name()
                {
                    comboName = r.FullName
                };

    List<Name> lst = qry.ToList();
    ComboBox1.ItemsSource = lst;
}
问题:当代码执行时,ComboBox1下拉框只显示字符串“myMemory.Name”9次(即Recipient表中的名称数)。我应该创建一个列表并将字符串值分配给该列表,而不是使用类吗?

到目前为止,我一直在使用c#控制台窗口,这是我第一个使用WPF的项目,所以任何帮助都将受到赞赏。


2
请查看此问题 https://dev59.com/guo6XIcBkEYKwwoYTzNK ..同时注意ComboBox的DisplayMemberPath和SelectedValuePath。 - Amitd
当您进行调试时,如果在ComboBox1.ItemSource = lst;这一行上设置断点,您会在lst中看到什么? - scgough
该列表包含9个值,它们是'myMemory.Name'。如果我点击索引下拉菜单,它会显示“comboName”,然后是我期望看到的实际值。 - luke_t
3个回答

2
< p > ComboBox 需要知道您希望如何显示您的 Name 类的实例。由于您没有明确告诉它,因此它使用 Name.ToString() 来显示您的 Name 实例。

您可以通过将 ComboBox1.DisplayMemberPath 设置为 comboName 显式告诉 ComboBox 如何显示您的 Name 类的实例。


1
List<Name> lst= from r in dc.Recipients
                select new Name()
                {
                  comboName = r.FullName
                }.ToList<Name>();

或者你可以像下面这样转换:

List<Name> lst = (List<Name>)qry.ToList();

0
var lst = dc.Recipients.Select(r => new Name{ comboName = r.FullName }).ToList();

5
解释解决方案通常有帮助。 - Bulat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接