以下是我的LINQ查询:
list = (from i in context.Cars
.Where(c => terms.All(t => c.Code.Contains(t) || c.ShortDescription.Contains(t)
&& c.Code.Replace(" " , "").Length >3))
select new Model.Cars
{
CarId = i.CarId,
ShortDescription = i.ShortDescription,
Code = i.Code
}).Take(250).ToList();\
业务要求之一是排除代码长度小于3的任何记录。很多这些代码中都有空格,这就是我将“”替换为“”的条款。这在我的查询中似乎不起作用。我仍然得到代码长度为3的结果。我应该只得到代码长度大于3的结果。几乎看起来替换不是替换没有空格的空格。其他一切都有效。我做错了什么?
答案 0 :(得分:5)
运营商优先权再次发生。
.Where(c =>
terms.All(t =>
( c.Code.Contains(t) || c.ShortDescription.Contains(t) )
&& c.Code.Replace(" " , "").Length > 3
)
)
if (true || true && false)
MessageBox.Show("Gotcha!");
答案 1 :(得分:0)
为什么要切换LINQ& lambda语法?如果你坚持使用LINQ语法,你可能会发现优先级问题:
list = (from i in context.Cars
let code = i.Code.Trim()
where terms.All(t => code.Contains(t) || i.ShortDescription.Contains(t))
&& code.Length > 3
select new Model.Cars
{
CarId = i.CarId,
ShortDescription = i.ShortDescription,
Code = code
}).Take(250).ToList();