C# 在两个表联接后获取字符串列表
我有两个表Card(cardID、cardName、setName)和Set(setID、setName、setMark)。我想将特定集合中的卡片名称添加到C# 在两个表联接后获取字符串列表,c#,wpf,linq-to-sql,C#,Wpf,Linq To Sql,我有两个表Card(cardID、cardName、setName)和Set(setID、setName、setMark)。我想将特定集合中的卡片名称添加到组合框项中 String setMark = comboBoxSetMark.SelectedItem.ToString(); comboBoxCardName.ItemsSource = (from cards in dataContext.Cards
组合框
项中
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();
我在组合框
项目选择中得到类似的结果:
{card name = Sylvan Caryatid}
如何仅获取cardName值?您正在
选择中选择新的匿名对象。WPF会自动调用此对象的ToString()
方法来呈现视图中的项目。编译器生成ToString()
的重写,该重写显示匿名对象中每个公共属性的值。
匿名对象的ToString()
的结果是:
{Name1=Value1,Name2=Value2}
这一“意外”结果的原因是。您可以通过从查询中选择string
来解决此问题
因此,请选择string
objects,而不是:
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"/>
对于选择卡片。cardID
它将生成列表,对吗?@Pochmunik是的,没错。@Pochmunik我也更新了我的答案,如果你想显示名称并获取所选项目的id。这也很有用,首先我需要在这里弄清楚两件事。谢谢,我有点问题