我有一个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中,但是我加入了表格,所以它应该在联合表格中......所以我可以,如果可以的话,我该如何做到这一点?
答案 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;