连接表的Displaymember路径

时间:2014-12-30 02:38:38

标签: c# wpf linq

我有一个linq查询,它返回一个tblprofessionals和联系人的联合表(每个专业人员都是联系人,联系人持有姓名,dob等,专业人员拥有专业的特定数据,网站,部门等)。< / p>

var asdf = (from a in dbContext.tblProfessionals
    join b in dbContext.contacts on a.contactId equals b.id
    select a);

所以理论上应该返回id,contactid,profsite,profdept,fname,lname,dob等。

我的问题是,如何设置displaymemberpath以将组合框中的文本显示为contacts.fname或contacts.lname。我试过简单地把

DisplayMemberPath="contacts.firstname"

但是这并没有做任何事情而且给了我这个错误

System.Windows.Data Error: 40 : BindingExpression path error: 'contacts' property not found on 'object' ''tblProfessional_1A2B2A1807FB8D48C805B985C726109DE29EF14983C5E9CE6564073CA9BB6C7F' (HashCode=54488246)'. BindingExpression:Path=contacts.firstname; DataItem='tblProfessional_1A2B2A1807FB8D48C805B985C726109DE29EF14983C5E9CE6564073CA9BB6C7F' (HashCode=54488246); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')

这是有道理的,因为显然名字不在tblProfessionals中,但是我加入了表格,所以它应该在联合表格中......所以我可以,如果可以的话,我该如何做到这一点?

1 个答案:

答案 0 :(得分:1)

您加入了教授和联系人,但只将教授(a)加入asdf

请执行以下操作:

var asdf = (from a in dbContext.tblProfessionals
join b in dbContext.contacts on a.contactId equals b.id
select new { ContactId = a.contactId, FirstName = b.firstname, LastName = b.lastname});

现在,您已将Profs的一个属性和联系人中的两个属性放入变量asdf中的匿名类型。 然后你可以这样做:

cbProf.DisplayMemberPath = asdf.FirstName;