Linq流利对Linq选择了布尔

OzB*_*Bob -2 c# linq

好吧Linq'ers.试一试.

为什么会

NextActioners.Select(n => n.NextActioner.Equals(true));
Run Code Online (Sandbox Code Playgroud)

错误地找到2条记录,

from a in NextActioners where (a.NextActioner.Equals(true)) select a;
Run Code Online (Sandbox Code Playgroud)

正确找不到?

在我的Good'ol Linqpad上:

    public class AppPerson
        {
            public string PersonId;
            public string FullName;
            public string Role;
            public bool NextActioner;
        }

    void Main()
    {
        var NextActioners = new List<AppPerson> {
                    new AppPerson{FullName="testFullname1", NextActioner=false},
                    new AppPerson{FullName="testFullname2", NextActioner=false},
                };

        //Are all the NextActioners 'nextActioner' value false
        var noApproversSelected = NextActioners.All(a => a.NextActioner.Equals(false));
        Console.WriteLine("noApproversSelected={0}",noApproversSelected.ToString());//Result = true

        var listOfApprovers = from a in NextActioners
                        where (a.NextActioner.Equals(true))
                        select a;
        Console.WriteLine("listOfApprovers.Count()={0}",listOfApprovers.Count().ToString());//Result = 0

        var listOfApprovers1 = NextActioners.Select(n => n.NextActioner.Equals(true));
        Console.WriteLine("listOfApprovers1.Count()={0}",listOfApprovers1.Count().ToString());//Result = 2!!!!!!!

        var listOfApprovers2 = NextActioners.Select(n => n.NextActioner == true);
        Console.WriteLine("listOfApprovers2.Count()={0}",listOfApprovers2.Count().ToString());//Result = 2!!!!!!!

        var listOfApprovers3 = NextActioners.Select(n => n.NextActioner);
        Console.WriteLine("listOfApprovers3.Count()={0}",listOfApprovers3.Count().ToString());//Result = 2!!!!!!!

    }
Run Code Online (Sandbox Code Playgroud)

dot*_*tom 6

通过使用

NextActioners.Select(n => n.NextActioner.Equals(true));
Run Code Online (Sandbox Code Playgroud)

你没有做任何过滤.选择运算符仅将一种类型的结果转换为不同类型的结果.为了过滤结果,您需要使用Where运算符,如下所示:

var listOfApprovers1 = NextActioners.Where(n => n.NextActioner.Equals(true)).Select(n=>n);
Run Code Online (Sandbox Code Playgroud)

  • `.选择(n => n)`是没有意义的. (7认同)