我正在尝试将联系人管理器应用程序作为主应用程序的一部分,而此时我需要一些建议。我有2个专用于管理联系人的表。
第一个表格(联系人)包含每个联系人的主要信息: 字段:ID,名字,姓氏,电子邮件,电话,公司
第二个表是一个查找分配表(AssignedContacts),其中包含要为其分配联系人的情况的参考ID和该联系人的ID: 字段:ID,ReferenceCaseID,ContactID
现在,我正在尝试创建一个视图,该视图返回分配给案例的联系人列表。该视图将接收ReferenceCaseID作为参数。
我对如何在控制器中进行编码以设置变量感到困惑。
public ActionResult Contacts(int id)
{
var Contacts = <insert logic to filter contacts to just those assigned based on the parameter passed>
if (Contacts == null)
return HttpNotFound();
return View(Contacts);
}
我知道我可以使用以下方法获得分配的联系人列表:
var AssignedContacts = _context.AssignedContacts.Where(c => c.ReferenceCaseID == id).ToList();
但是,我对现在如何得出结果并使用此结果过滤联系人感到困惑。
任何帮助将不胜感激。如果您对以上内容有任何疑问,请通过文本告诉我们。
答案 0 :(得分:0)
var contacts = _context.AssignedContacts.Where(ac => ac.ReferenceCaseID == id)
.Join(_context.Contacts, assigned => assigned.ContactID, contact => contact.ID,
(assigned, contact) => contact);
我无法测试它,因为我没有完整的代码,但是从根本上讲,您从所做的事情开始-过滤AssignedContacts
表。
然后根据两个表中的Contacts
和ContactID
键将结果与ID
表联接。
最后,选择结果联接的联系人。
或者,您可以联接表,然后进行过滤:
var contacts = _context.Contacts.Join(_context.AssignedContacts, contact =>
contact.ID, assigned => assigned.ContactID, (contact, assigned) =>
new { Contact = contact, ReferenceCaseID = assigned.ReferenceCaseID } )
.Where(contactWithRefId => contactWithRefId.ReferenceCaseID == id);
这里从Contacts
表开始,然后根据两个表中的AssignedContacts
和ID
键将其与ContactID
表联接。
然后,您将创建一种新型的匿名对象,该对象是与ReferenceCaseID
的联系人(这意味着您可能具有重复的联系人,而这些联系人具有不同的ReferenceCaseID
)。
最后,您使用where
通过ReferenceCaseID
筛选这些新的联系人对象,这将删除所有不相关的联系人。
答案 1 :(得分:0)
您必须加入“分配的联系人”和“联系人”这两个实体之间的联系人ID,然后过滤参考ID是您传入的内容。
未经测试,但可能会让您入门:
var contactsMatching= (from c in dbContext.Contacts
join ac in dbContext.AssignedContacts on
c.ID equlas ac.ContactID
where ac.ReferenceCaseID==<your provided id>
select Contact{
ID = c.ID,
FirstName= c.FirstName,
..snip..
}).ToList();
答案 2 :(得分:0)
感谢大家以上的回答。我和一位好友一起工作,并使用以下内容找到了我想要的东西:
public ActionResult Contacts(int id)
{
var Contacts =
from contact in _context.Contacts
join assignedcontact in _context.AssignedContacts on contact.Id equals assignedcontact.ContactId
where assignedcontact.ReferenceCaseID == id
select contact;
if (Contacts == null)
return HttpNotFound();
return View(Contacts);
}