有人关心我们是否应该在 LINQ Where() 扩展/查询中使用“I”或“II”以及“&”或“&&”吗?与 LINQ to SQL 有什么区别?生成的表达式树超出了我周五下午的大脑范围
谢谢,
static void Main(string[] args)
{
var numbers = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var q1 = numbers.Where(i => i == 1 | i == 2);
var q2 = numbers.Where(i => i == 1 || i == 2);
var q3 = numbers.Where(i => i == 1 & i < 3);
var q4 = numbers.Where(i => i == 1 && i < 3);
Write(q1);
Write(q2);
Write(q3);
Write(q4);
}
static void Write<T>(IEnumerable<T> t)
{
foreach (var i in t)
Console.Write("{0} ", i);
Console.WriteLine();
}
Results:
1 2
1 2
1
1
最佳答案
你想要||
/&&
。
好吧,单管道 (|
/&
) 通常用于按位运算,并且(除了其他问题)可能会使代码库更难理解;它会在 LINQ-to-Objects 中工作(因为按位仍然是为 bool
定义的),但没有通常的短路。但是,如果您的数据源是数据库(即混合了一个表达式解析器),您可能会发现它在您身上爆炸。
好的;按位可能具有误导性;但是 || && 仍然是表达您的意图的最合乎逻辑和预期的方式。对于任何混淆,我深表歉意。
关于c# - LINQ Where() 单管道或双管道/符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1214818/