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

时间:2016-03-30 22:00:01

标签: c# entity-framework linq linq-to-sql lambda

以下是我使用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。

非常感谢你的帮助!

1 个答案:

答案 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(||)是关键。