假设我有这样的对(在列表中):[{a,15},{b,null},{a,null}]
每对都有一个字符键和一个可以为空的值。我想选择列表中不包含具有相同键和非空值的另一对的所有对。
在上面的示例列表中,我只想获得{b,null},因为'a'在第一对中具有非空值。我如何使用LINQ做到这一点?
答案 0 :(得分:0)
假设列表(变量名称项)是一个集合(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();
答案 1 :(得分:0)
您可以使用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));
答案 2 :(得分:0)
假设您的列表项有两个字段(键,值),您可以这样做。
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());