是否可以在where(LINQ)中包含一个子句,但仅当它的“NOT”为空时才会包含?
即
where c.Code == sCode && p.Code == code
在这种情况下,变量(标准c#)被称为代码...如果它是非空的那么上面的地方很棒..但如果它是空的那么我不想在其中包含其中
即
where c.Code == sCode
在SQL中它的完成就像这样
AND ( ( @code = '' )
OR ( @code <> ''
AND C.Code = @code
)
答案 0 :(得分:10)
where c.Code == sCode && (string.IsNullOrEmpty(code) || p.Code == code)
这是标准的LINQ,我不知道它是否适用于LINQ to SQL。
编辑: 这适用于short circuit evaluation
如果c.Code == sCode
为false,则停止评估并返回false
否则,如果string.IsNullOrEmpty(code)
为真,则停止评估并返回true
否则,请返回p.Code == code
答案 1 :(得分:4)
将其放在IQueryable<T>
扩展方法中,以使其非常简单:
public static IQueryable<Code> WithCodeIfNotEmpty(this IQueryable<Code> source, string code)
{
if (string.IsNullOrEmpty(code))
return source;
else
return source.Where(x => x.Code == code);
}
用法:
var query = something.WithCodeIfNotEmpty("someCode");
答案 2 :(得分:3)
正如其他人所说:
(string.IsNullOrEmpty(code) || p.Code == code)
btw sql可以优化到
C.Code = isnull(ltrim(rtrim(@code)), c.Code)
答案 3 :(得分:0)
如果您想要直接翻译表格,那么您给出的TSQL就是答案
where
code == "" ||
(code != "" &&
c.Code == code)