我有以下课程: -
public class ContactsDetails
{
public IEnumerable<AaaUserContactInfo> Info { get; set; }
}
其中AaaUserContactInfo有两个引用其他表的外键: -
public partial class AaaUserContactInfo
{
public long USER_ID { get; set; }
public long CONTACTINFO_ID { get; set; }
public string desc { get; set; }
public virtual AaaContactInfo AaaContactInfo { get; set; }
public virtual AaaUser AaaUser { get; set; }
}
现在我有以下类来启动一个新的ContactDetails对象: -
public ActionResult CustomersDetails(long[] OrganizationIds)
{
if (OrganizationIds == null)
{
return RedirectToAction("customer", new { isError = true });
}
else
{
var ContactsDetails = new ContactsDetails
{
Info = r.getcontactinfo(OrganizationIds)
};
}
return View();
}
现在我需要返回所有AaaUserContactInfo对象,这些对象的电子邮件ID包含组织名称的一部分,类似于: -
public IEnumerable<AaaUserContactInfo> getcontactinfo(long[] Organizationid)
{
var result = ((from uci in entities.AaaUserContactInfoes
join ci in entities.AaaContactInfoes on uci.CONTACTINFO_ID equals ci.CONTACTINFO_ID
where ci.EMAILID.ToString() == // contains any organization name in their emailIds ,, where i can get the organization name using sonthing similar to var orgname = entities.SDOrganizations.Where(a => a.ORG_ID == OrganizationIds[i]).FirstOrDefault().NAME;
select uci)) ;
return result;
}
答案 0 :(得分:1)
您可以尝试使用下一个查询吗?如果示例中的FirstOrDefault()
返回null,我不知道您想要做什么。在我的情况下,不会抛出任何异常,但不会返回记录。请注意有关实施的详细信息以及是否有效。
public IEnumerable<AaaUserContactInfo> getcontactinfo(long[] organizationIds)
{
var organizationNames = entities.SDOrganizations
.Where(org => organizationIds.Contains(org.ORG_ID))
.Select(org=> org.Name);
var result = from userContactInfo in entities.AaaUserContactInfoes
join contactInfo in entities.AaaContactInfoes on userContactInfo.CONTACTINFO_ID equals contactInfo.CONTACTINFO_ID
//check if EMAILID string has at least one organizationName as substring
where organizationNames.Any(orgName => contactInfo.EMAILID.ToString().Contains(orgName))
select userContactInfo;
return result;
}
编辑:更新了答案,以处理根据Organizationid
选择的许多组织。如果entities.AaaContactInfoes
包含在至少一个ogranization的名称字段中,则选择EMAILID
。
注意:我重命名了一些仅在方法范围内使用的参数,只是为了使代码更具可读性。