我有这样查询到sql的linq
forms = attributesData.Where(x => x.strValue.ToLower().Contains(ddlProvince.SelectedItem.Text.ToLower())
&& x.attributeName == "Province"
&& (x.attributeName=="District" && x.strValue==ddlDistrict.SelectedItem.Text)
&& (x.attributeName == "TrainingProgram Code" && x.strValue==ddlSearch.Text)
&& (x.attributeName == "Father Name" && x.strValue==txtform.Text)
).Select(t => t.strFormId).Distinct().ToList();
问题是我在数据库中只有strvalue列,该列现在存储所有信息,如果我应用并且运算符查询返回null,则我必须应用倍数搜索操作。但是如果我应用或运算符查询返回值但我需要and运算符的结果不是或操作员请帮忙。
从您的问题来看,您似乎正在使用“实体属性”值模式。要使用AND过滤结果,您需要根据搜索条件将表多次连接到自身。这是与此模式相关的开销。以下是一个示例代码,该代码介绍了如何在您的方案中处理联接。在该示例中,我假设将所有属性组合在一起的“实体ID”为“ strFormId”。
Dictionary<string, string> equalitySearchCriteria = new Dictionary<string, string>();
equalitySearchCriteria.Add("TrainingProgram Code", ddlSearch.Text);
equalitySearchCriteria.Add("District",ddlDistrict.SelectedItem.Text);
// Add other items
Dictionary<string, string> likeSearchCriteria = new Dictionary<string, string>();
likeSearchCriteria.Add("Province", ddlProvince.SelectedItem.Text.ToLower());
// Add other items
var query = attributesData.Where(x => true);
foreach(var criterion in equalitySearchCriteria)
{
var equalityJoinQuery = attributesData.Where(x => x.attributeName == criterion.Key && x.strValue == criterion.Key);
query = query.Join(equalityJoinQuery, x => x.strFormId, y => y.strFormId, (x, y) => x);
}
foreach(var criterion in likeSearchCriteria)
{
var likeJoinQuery = attributesData.Where(x => x.attributeName == criterion.Key && x.strValue.Contains(criterion.Key));
query = query.Join(likeJoinQuery, x => x.strFormId, y => y.strFormId, (x, y) => x);
}
var result = query.Select(t => t.strFormId).Distinct().ToList();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句