C#LINQ-Get对,当具有相同第一个值的所有对中的第二个值为null时
假设我有这样的配对:[{a,15},{b,null},{a,null}] 每对都有一个字符键和一个可为空的值。我想选择列表中不包含具有相同密钥和非空值的另一对的所有对 在上面的示例列表中,我只想得到{b,null},因为'a'在第一对中有一个非null值。我将如何使用LINQ实现这一点?假设列表(变量名项)是一个集合(chr,Id),然后使用以下LINQ获得结果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
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,我想我知道了我的答案和你期望的相符吗?