Linq-C#查询动态搜索页面

Linq-C# Query For Dynamic Search Page

以下是我的原始代码,它使用 Entity Framework 上下文查询 SQL 服务器。它查询数据库并使用 StartsWith 方法匹配用户客户端输入的字符串。这允许用户输入三个字段(名字、姓氏和 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 table(申请人)。但是,我还有另一个 table (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 和 phone 号码。我在制定查询时需要帮助,以便用户可以通过搜索只有 1 个或文本框的任意组合。

申请人table中的主键是HOH_UPI,Contact_Infotable中的外键是HOH_UPI。

非常感谢您的帮助!

我成功了:

 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;

知道在哪里使用逻辑与 (&&) 和或 (||) 是关键。