以下是我使用Entity Framework上下文查询SQL Server的原始代码。它查询数据库并使用StartsWith方法匹配用户客户端输入的字符串。这允许用户输入三个字段(FirstName,LastName和HOHUPI)的任意组合。
var results = db.APPLICANTs.Where(p => (p.RESP_FRST.StartsWith(model.FirstName) || model.FirstName == null)
&& (p.RESP_LST.StartsWith(model.LastName) || model.LastName == null) && (p.HOH_UPI.ToString().StartsWith(model.HOHUPI) || model.HOHUPI == null))
.OrderBy(p => p.RESP_FRST);
此查询仅查找1个表(申请人)。但是,我有另一个表(Contact_Info),我需要在结果中包含它。我在EF模型中没有导航属性。
我尝试了以下内容:
var hID = from APPLICANT in context.APPLICANTs
join CONTACT_INFO in context.CONTACT_INFO on APPLICANT.HOH_UPI equals CONTACT_INFO.HOH_UPI
where (APPLICANT.HOH_UPI.ToString().StartsWith(model.HOHUPI)) && (APPLICANT.RESP_FRST.StartsWith(model.FirstName))
&& (APPLICANT.RESP_LST.StartsWith(model.LastName)) && (CONTACT_INFO.HM_PHN_NMB.ToString().StartsWith(model.HM_PHN_NMB))
orderby APPLICANT.RESP_FRST
select APPLICANT;
model.SearchResults = hID.ToPagedList(pageIndex, RecordsPerPage);
这只有在用户输入所有4个文本框(名字,姓氏,hohupi和电话号码)中的值时才有效。我在制定查询时需要帮助,以便用户只能搜索1或任何组合文本框。
申请人表中的主键是HOH_UPI,Contact_Info表中的外键是HOH_UPI。
非常感谢你的帮助!
答案 0 :(得分:0)
我得到了它的工作:
var hID = from APPLICANT in context.APPLICANTs
join CONTACT_INFO in context.CONTACT_INFO on APPLICANT.HOH_UPI equals CONTACT_INFO.HOH_UPI
where (APPLICANT.HOH_UPI.ToString().StartsWith(model.HOHUPI) || model.HOHUPI == null) && (APPLICANT.RESP_FRST.StartsWith(model.FirstName) || model.FirstName == null)
&& (APPLICANT.RESP_LST.StartsWith(model.LastName) || model.LastName == null) && (CONTACT_INFO.HM_PHN_NMB.ToString().StartsWith(model.HM_PHN_NMB) || model.HM_PHN_NMB == null)
orderby APPLICANT.RESP_FRST
select APPLICANT;
知道在哪里使用逻辑AND(&&)和OR(||)是关键。