linq 和运算符问题

linq and operator issue

我有这样的 linq to sql 查询

  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 列,它存储所有信息现在我必须应用多次搜索操作如果我应用和运算符查询 return null.But 如果我应用或运算符查询return 值,但我需要和运算符的结果,或者运算符请帮助。

从您的问题来看,您似乎正在使用实体属性值模式。要使用 AND 筛选结果,您需要根据搜索条件多次将 table 与其自身连接。这是与此模式相关的开销。以下是一个示例代码,它说明了如何在您的场景中处理连接。在示例中,我假设将所有属性组合在一起的实体 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();