c# - LINQ Where() 单管道或双管道/符号

标签 c# linq linq-to-sql

有人关心我们是否应该在 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/

相关文章:

c# - 在 C# 中动态设置属性类型

c# - 使用 DynamicMethod 进行运行时代码注入(inject)?

c# - 如何匹配另一个列表中列表元素的子字符串?

c# - 使用 LINQ 为可空值强加排序规则

linq-to-sql - Linq to SQL 或 Linq to Entities 4.0 是否支持hierarchyid 数据类型

c# - 如何在 Windows Azure (MVC) 中记录错误和用户操作?

c# - 为什么字符串的索引器是只读的?

c# - LINQ 选择查询

sql - Linq 到 SQL : Get number of consecutive daily views

LINQ To SQL 异常 : Local sequence cannot be used in LINQ to SQL implementation of query operators except the Contains operator