当前位置 : 主页 > 编程语言 > c++ >

C#linq查询聚合可以为空的布尔值

来源:互联网 收集:自由互联 发布时间:2021-06-23
我想使用 linq按照逻辑聚合可空的bool: 如果一切都是真的那么真实; 如果一切都是假的那么假; 否则为null 这是我的代码,我无法得到bool聚合. class T1{ public string property1{get;set;} public stri
我想使用 linq按照逻辑聚合可空的bool:

>如果一切都是真的那么真实;
>如果一切都是假的那么假;
>否则为null

这是我的代码,我无法得到bool聚合.

class T1
{
  public string property1{get;set;}
  public string property2{get;set;}
  public bool? BoolProperty{get;set;}
}

///initialize a list<T1> t2 with values......
List<T1> t2 = new List<T1>();
t2.Add(new T1() 
        {
            property1="hello",
            property2="world",
            BoolProperty=true
        });
t2.Add(new T1() 
        {
            property1="hello",
            property2="world",
            BoolProperty=false
        });

List<T1> t1 = t2.GroupBy(g => new
        {
            g.property1,
            g.property2               
        })
        .Select(g => new T1
        {
            property1 = g.Key.property1,
            property2 = g.Key.property2,                
            BoolProperty = ////can someone help? if all object in t2 are true, true; if all object in t2 are false, false; else null
 ///in this case i am expecting a null
        }).ToList();

所以t1将是“hello”,“world”,null;
谢谢

把它放在你的代码中,

List<T1> t1 = t2.GroupBy(g => new
        {
            g.property1,
            g.property2               
        })
        .Select(g => new T1
        {
            property1 = g.Key.property1,
            property2 = g.Key.property2,                
            BoolProperty =  g.GroupBy(grp => grp.BoolProperty).Count() > 1 ? null : g.Select(g_val=>g_val.BoolProperty).First()
        }).ToList();
网友评论