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

时间:2015-03-01 14:34:57

标签: c# wpf linq-to-sql

我有两张桌子卡(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值?

1 个答案:

答案 0 :(得分:2)

您正在Select中选择新的匿名对象。并且WPF自动调用此对象的ToString()方法以在视图中呈现项目。编译器 生成ToString()的覆盖 ,显示 匿名对象中每个公共属性的值 < / strong>即可。 匿名对象的ToString()结果为:

  

{Name1 = Value1,Name2 = Value2}

这种“意外”结果的原因是。您可以从查询中选择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;
}

然后从您的查询中获取List:

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();

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

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