在连接两个表后获取字符串列表
本文关键字:获取 字符串 列表 两个 连接 | 更新日期: 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
中为您的控件设置 DisplayMemberPath
和 SelectedValuePath
:
<ComboBox ...
DisplayMemberPath="Name"
SelectedValuePath="Id"/>