通过另一个变量的结果过滤结果?



我正在尝试将联系人管理器应用程序作为我的主要应用程序的一部分,并且需要一些建议。我有 2 张专门用于管理联系人的表。

第一个表(联系人)包含每个联系人的主要信息: 字段:ID、名字、姓氏、电子邮件、电话、公司

第二个表是查找分配表 (已分配联系人),其中包含要向其分配联系人的案例的参考 ID 和联系人的 ID: 字段:ID、参考案例 ID、联系人 ID

现在,我正在尝试创建一个视图,该视图返回分配给案例的联系人列表。视图将接收 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();

但老实说,我对现在如何获取该结果并使用它过滤联系人感到困惑。

任何帮助将不胜感激。如果您对上述内容有任何疑问,请告诉我,因为很难通过文本解释。

var contacts = _context.AssignedContacts.Where(ac => ac.ReferenceCaseID == id)
.Join(_context.Contacts, assigned => assigned.ContactID, contact => contact.ID,        
(assigned, contact) => contact);

我无法测试它,因为我没有您的整个代码,但基本上,您从您所做的开始 - 过滤AssignedContacts表。

然后,根据两个表中的ContactIDID键将结果与Contacts表联接。

最后,选择生成的联接的联系人。


或者,您可以联接表,然后筛选:

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开始,并根据两个表中的ID键和ContactID键将其与AssignedContacts表联接。

然后,您创建一种新的匿名对象,它是具有ReferenceCaseID的联系人(这意味着您可能具有具有不同ReferenceCaseID的重复联系人)。

最后,您可以使用whereReferenceCaseID筛选这些新联系人对象,这将删除所有不相关的联系人。

您必须加入两个实体("分配的联系人"和"联系人")之间的联系人 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();

感谢大家在上面的回答。我和我的一个朋友在工作中在一起,并使用以下方法找到了我想要的东西:

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

最新更新