我有一个ASP.NET MVC站点(使用Linq To Sql作为ORM)以及客户想要针对定制数据库的搜索工具的情况,他们可以选择进行"AND"搜索(所有条件匹配)或'OR'搜索(任何标准匹配).查询非常复杂且冗长,我想知道是否有一种简单的方法可以使它同时完成,而无需创建和维护两个不同版本的查询.
例如,当前的"AND"搜索看起来像这样(但这是一个非常简化的版本):
private IQueryable<SampleListDto> GetSampleSearchQuery(SamplesCriteria criteria)
{
var results = from r in Table where
(r.Id == criteria.SampleId) &&
(r.Status.SampleStatusId == criteria.SampleStatusId) &&
(r.Job.JobNumber.StartsWith(criteria.JobNumber)) &&
(r.Description.Contains(criteria.Description))
select r;
}
Run Code Online (Sandbox Code Playgroud)
我可以复制它并用||替换&& 运营商获得'OR'版本,但觉得必须有更好的方法来实现这一目标.有没有人有任何建议如何以一种易于维护的高效灵活的方式实现这一目标?谢谢.
我有一个搜索表单,允许用户以几种不同的方式搜索几个不同的字段.这是我的代码示例.
var claims = from c in db.Claims select c;
switch (ddlSearchField.Text)
{
case "StartsWith":
claims = claims.Where(c => c.companyFileID.StartsWith(txtSearchBox.Text));
break;
case "Equals":
claims = claims.Where(c => c.companyFileID == txtSearchBox.Text);
break;
case "Contains":
claims = claims.Where(c => c.companyFileID.Contains(txtSearchBox.Text));
break;
}
Run Code Online (Sandbox Code Playgroud)
我有大约十个不同的字段,用户可以搜索,所以我的外部开关语句非常大.必须有一种更优雅的方式来实现这一目标.
我正在使用LINQ来查询数据.考虑一个用户只想报告3个字段中的1个字段的情况?(见下文)
谁能告诉我如何动态构建查询?
谢谢
DD
var query =
from cl in db.tblClaims
join cs in db.tblCases
on cl.ref_no equals cs.ref_no
where cl.claim_status == "Appeal"
&& cl.appeal_date >= Convert.ToDateTime(txtReferedFromDate.Text)
&& cl.appeal_date <= Convert.ToDateTime(txtReferedToDate.Text)
&& cs.referred_from_lho == dlLHO.Text
&& cs.adviser == dlAdviser.Text
select new
{
Ref = cs.ref_no,
ClaimType = cl.claim_type,
ClaimStatus = cl.claim_status,
AppealDate = cl.appeal_date
};
gvReport.DataSource = query;
Run Code Online (Sandbox Code Playgroud)