我想生成动态查询以检查管理where子句的可用参数数量...如果某个参数为null我不想将它包含在where子句中
var test = from p in _db.test
where if(str1 != null){p.test == str} else i dnt wanna check p.test
我有大约14个where子句的参数
需要帮助, 感谢
答案 0 :(得分:5)
您可以分步执行:
// set up the "main query"
var test = from p in _db.test select _db.test;
// if str1 is not null, add a where-condition
if(str1 != null)
{
test = test.Where(p => p.test == str);
}
答案 1 :(得分:1)
除了@Fredrik的回答,你还可以在评估布尔表达式时使用短路规则,如下所示:
var test = from p in _db.test
where str1 == null || p.test == str1;
修改如果您要测试很多字符串,(str1
,str2
等等),那么您可以使用以下内容,这些内容将被翻译为SQL IN
子句:
var strings = new List<string>();
if (str1 != null) strings.Add(str1);
if (str2 != null) strings.Add(str2);
if (str3 != null) strings.Add(str3);
...
var test = from p in _db.test
where strings.Contains(p.test);
如果你的字符串已经在一个集合中,那就更容易了(如果你有14个,我认为它们会......)
答案 2 :(得分:1)
考虑param1和param2是参数。您的查询应该如下:
string param1 = "Value1";
string param2 = "Value2";
var q = from bal in context.FxBalanceDetails
where (string.IsNullOrEmpty(param1) || bal.Column1 == param1)
&& (string.IsNullOrEmpty(param2) || bal.Column2 == param2)
select bal;
这将确保仅在特定参数不为null时才应用where子句。
答案 3 :(得分:0)
您是否根据实体的相同字段检查字符串? 如果是这样,你可以写下这样的东西:
var strings = new[] { "foo", "bar", "ok", "", null };
var query = dataContext.YourTable.AsQueryable();
query = strings.Where(s => !string.IsNullOrEmpty(s))
.ToList()
.Aggregate(query, (q, s) => q.Where(e => e.YourField == s));
编辑: 以前的解决方案过于复杂:
var strings = new[] { "foo", "bar", "ok", "", null }.Where(s => !string.IsNullOrEmpty(s))
.ToList();
var query = dataContext.YourTable.Where(e => strings.Contains(e.YourField));
答案 4 :(得分:0)
var test =
from p in _db.test
where p.str1 != null ? p.str1 : ""
select p;