Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#LINQ-Get对,当具有相同第一个值的所有对中的第二个值为null时_C#_Linq - Fatal编程技术网

C#LINQ-Get对,当具有相同第一个值的所有对中的第二个值为null时

C#LINQ-Get对,当具有相同第一个值的所有对中的第二个值为null时,c#,linq,C#,Linq,假设我有这样的配对:[{a,15},{b,null},{a,null}] 每对都有一个字符键和一个可为空的值。我想选择列表中不包含具有相同密钥和非空值的另一对的所有对 在上面的示例列表中,我只想得到{b,null},因为'a'在第一对中有一个非null值。我将如何使用LINQ实现这一点?假设列表(变量名项)是一个集合(chr,Id),然后使用以下LINQ获得结果 var result = (from t1 in items group

假设我有这样的配对:[{a,15},{b,null},{a,null}]

每对都有一个字符键和一个可为空的值。我想选择列表中不包含具有相同密钥和非空值的另一对的所有对

在上面的示例列表中,我只想得到{b,null},因为'a'在第一对中有一个非null值。我将如何使用LINQ实现这一点?

假设列表(变量名项)是一个集合(chr,Id),然后使用以下LINQ获得结果

        var result = (from t1 in items
                      group t1 by t1.chr into t2
                      where t2.Count(p => p.Id!= null) == 0
                      select new
                      {
                          chr = t2.Key,
                          Id  = t2.Select(p => p.Id).FirstOrDefault()
                      }).ToList();

您可以使用
Where
函数选择元素,同时使用
Any
函数检查是否存在具有相同键和非空值的对。以下是一个例子:

class Pair
{
    public char Key { get; set; }
    public int? Value { get; set; }
}

var pairs = new[] { new Pair { Key = 'a', Value = 15 },
                    new Pair { Key = 'b', Value = null },
                    new Pair { Key = 'a', Value = null }
}

var nullOnlyPairs = pairs.Where(p => !pairs.Any(a => a.Key == p.Key && a.Value != null));

假设列表项有两个字段(键、值),则可以执行此操作

var output = items.GroupBy(c=>c.Key) // Group by Letter
                  .Where(c=>!c.Any(e=>e.Value != null)) // Verify each Key has any other value than Null
                  .Select(c=>c.First());

那么你想得到第一对,它的值与之前的不同吗?你的意思是想得到{a,null}吗?不,我给你看另一个例子,那么应该很清楚:[{a,null},{b,null},{c,null},{c,null},{a,6},{d,5},{d,null},{e,null}],我想得到{b,null},{c,null},{e,null},Ok,我想我知道了我的答案和你期望的相符吗?