我需要创建一个包含WHERE
表达式的OR
子句的SQL Linq。其操作数存储在List
中。
通过这段代码,我最终得到一个AND表达式:
private sigdaEntities db = new sigdaEntities();
List<string> list = new List<string>();
list.Add("Nom");
list.Add("Representant");
IQueryable<ExplotacionsAgraries> consulta = db.ExplotacionsAgraries;
foreach (string DataColumn in list) {
if (DataColumn=="Nom") {
consulta.Where(x => x.nom.Contains(valueSearch));
}
if (DataColumn=="Representant") {
consulta.Where(x => x.representant.Contains(valueSearch));
}
}
我该怎么做才能获得OR
表达式?
答案 0 :(得分:1)
您可以使用多个.Union()
语句手动构建OR。
我还改用了list.Contains()
,因为对我来说似乎可以更好地反映代码的作用。
IQueryable<ExplotacionsAgraries> consulta = db.ExplotacionsAgraries;
if (list.Any()) {
// Start with "nothing":
var result = consulta.Take(0);
// Add results from each filter:
if (list.Contains("Nom"))
result = result.Union(consulta.Where(x => x.nom.Contains(valueSearch)));
if (list.Contains("Representant"))
result = result.Union(consulta.Where(x => x.representant.Contains(valueSearch));
// And keep the final result
consulta = result;
}
答案 1 :(得分:0)
我不确定这是否是您要寻找的,但是您可以使用Queryable.Union
方法,该方法将
产生两个序列的集合并集。
您的代码将如下所示:
IQueryable<ExplotacionsAgraries> consulta = db.ExplotacionsAgraries;
var result = null;
foreach (string DataColumn in list)
{
if (DataColumn=="Nom")
{
if (result == null)
{
result = consulta.Where(x => x.nom.Contains(valueSearch));
}
else
{
result = result.Union(consulta.Where(x => x.nom.Contains(valueSearch)));
}
}
if (DataColumn=="Representant")
{
if (result == null)
{
result = consulta.Where(x => x.representant.Contains(valueSearch));
}
else
{
result = result.Union(consulta.Where(x => x.representant.Contains(valueSearch)));
}
}
}
代码未经测试,但可以完成您的工作。
答案 2 :(得分:0)
您可以尝试一下。
IQueryable<ExplotacionsAgraries> consulta = db.ExplotacionsAgraries;
consulta.Where(x => (list.Contains("Nom") && x.nom.Contains(valueSearch))
|| (list.Contains("Representant") && x.representant.Contains(valueSearch)));
答案 3 :(得分:0)
你可以做
db.ExplotacionsAgraries.Where(x => (list.Any(i => i == "Nom") &&
x.nom.Contains(valueSearch)) || (list.Any(i => i == "Representant") &&
x.representant.Contains(valueSearch)))