在连接两个表后获取字符串列表

本文关键字:获取 字符串 列表 两个 连接 | 更新日期: 2024-09-21 19:59:40

我有两个表Card(cardID,cardName,setName(和Set(setID,setName,setMark(。我想将特定集中的卡名添加到ComboBox项目。

String setMark = comboBoxSetMark.SelectedItem.ToString();
comboBoxCardName.ItemsSource = (from cards in dataContext.Cards
                                            join sets in dataContext.Sets
                                            on cards.setID equals sets.setID
                                            where sets.setMark == setMark
                                            select new
                                            {
                                                cards.cardName
                                            }).ToList();

我在comboBox项目选择中得到类似的东西:

{card name = Sylvan Caryatid}

如何只获取卡名值?

在连接两个表后获取字符串列表

您正在Select中选择新的匿名对象。WPF 会自动调用此对象ToString()方法以呈现视图中的项。编译器生成 ToString()重写,以显示匿名对象中每个公共属性的值。匿名对象的ToString()结果为:

{ 名称 1 = 值 1, 名称 2 = 值 2 }

这个"出乎意料"的结果的原因是。可以通过从查询中选择string来解决此问题。

因此,选择string对象,而不是这样做:

comboBoxCardName.ItemsSource = (from cards in dataContext.Cards
                                join sets in dataContext.Sets
                                    on cards.setID equals sets.setID
                                where sets.setMark == setMark
                                select cards.cardName
                                ).ToList();


附加:

更好的解决方案是为控件创建一个新模型,该模型必须显示名称,但选择所选项的 id。

为此,您可以创建一个新类:

public class MyItem
{
   public int Id;
   public string Name;
}

然后从查询中获取列表:

comboBoxCardName.ItemsSource = (from cards in dataContext.Cards
                                join sets in dataContext.Sets
                                    on cards.setID equals sets.setID
                                where sets.setMark == setMark
                                select new { cardName = cards.cardName, cardId = cards.cardID }
                                ).AsEnumerable()
                               .Select(x => new MyItem { Id = x.cardName, Name= x.cardId })
                               .ToList();

然后在.xaml中为您的控件设置 DisplayMemberPathSelectedValuePath

<ComboBox ...
          DisplayMemberPath="Name"
          SelectedValuePath="Id"/>