Linq fluent vs Linq select on booleans

本文关键字:Linq booleans on vs fluent select | 更新日期: 2023-09-27 18:20:03

好吧,林。试试这个。

为什么

NextActioners.Select(n => n.NextActioner.Equals(true));

错误地找到2条记录,

但是

from a in NextActioners where (a.NextActioner.Equals(true)) select a;

正确地找不到?

关于我的好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!!!!!!!
    }

Linq fluent vs Linq select on booleans

使用

NextActioners.Select(n => n.NextActioner.Equals(true));

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

var listOfApprovers1 = NextActioners.Where(n => n.NextActioner.Equals(true)).Select(n=>n);