连接两个表后获取字符串列表
Getting String List after join of two tables
我有两个表 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}
如何只获取cardName的值?
您正在 select 在您的 Select
中创建新的匿名对象。 WPF 自动调用此对象的 ToString()
方法来呈现视图中的项目。编译器 生成 ToString()
的覆盖 ,显示每个 的值 public 匿名对象中的属性。
ToString()
对于匿名对象的结果将是:
{ Name1 = Value1, Name2 = Value2 }
这个"unexpected"结果的原因是。您可以通过从查询中 selecting string
来解决此问题。
因此,select 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();
补充:
更好的解决方案是为您的控件创建一个新模型,该模型必须显示名称,但 select selected 项目的 ID。
为此,您可以创建一个新的 class:
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"/>
我有两个表 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}
如何只获取cardName的值?
您正在 select 在您的 Select
中创建新的匿名对象。 WPF 自动调用此对象的 ToString()
方法来呈现视图中的项目。编译器 生成 ToString()
的覆盖 ,显示每个 的值 public 匿名对象中的属性。
ToString()
对于匿名对象的结果将是:
{ Name1 = Value1, Name2 = Value2 }
这个"unexpected"结果的原因是。您可以通过从查询中 selecting string
来解决此问题。
因此,select 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();
补充:
更好的解决方案是为您的控件创建一个新模型,该模型必须显示名称,但 select selected 项目的 ID。
为此,您可以创建一个新的 class:
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"/>