C# 检查ILookup中某个键是否存在值的最佳方法<;字符串,字符串>;使用linq

C# 检查ILookup中某个键是否存在值的最佳方法<;字符串,字符串>;使用linq,c#,linq,c#-4.0,linq-to-entities,C#,Linq,C# 4.0,Linq To Entities,应该返回true bool status = someList.Where(x => x.Key == "Football").Where( y => y.Value == "Ronaldo") 应该返回false ILookup没有value属性,没有循环,而是有更聪明的方法在几行中得到结果。上面的代码不正确,如果可能的话,希望类似的代码。我是Linq的新手,因此学习更好的方法从属性返回的对象(当您执行someList[…])时称为对象)是一个IEnumerable。因此,您可

应该返回true

bool status = someList.Where(x => x.Key == "Football").Where( y => y.Value == "Ronaldo") 
应该返回false


ILookup没有value属性,没有循环,而是有更聪明的方法在几行中得到结果。上面的代码不正确,如果可能的话,希望类似的代码。我是Linq的新手,因此学习更好的方法

从属性返回的对象(当您执行
someList[…]
)时称为对象)是一个
IEnumerable
。因此,您可以直接将每个项目与测试值进行比较。像这样:

bool status = someList.Where(x => x.Key == "Football").Where( y => y.Value == "Venus williams")
bool status = someList.Where(x => x.Key == "Football").Any( y => y.Value == "Venus williams")
我会使用
.Any(x=>x.Value==“Value”)

可能是错误的,但我认为您应该分两步进行,在继续值搜索之前检查第一次(键)搜索是否成功,以确保您没有对
空对象执行
Any()
,如何:

var status = someList["Football"].Any(y => y == "Venus Williams");

说明:ILookup是IGrouping的一个IEnumerable-一个分组有一个Key属性,是一个字符串值列表

如果在查找中没有
“Football”
键,它将失败。你应该先调用someList.Contains(“Football”)
。@MarcinJuraszek你确定吗?我只是用
ToLookup
创建的查找来尝试,结果返回了一个空集。注意,文档指定了一个异常,但是文档没有。嗯,我确定吗?不是真的,但这是一种逻辑行为。非常感谢你指出我错了@MarcinJuraszek我真的很好奇你是否知道会发生这种情况。文档没有指定异常,但也没有提到如果找不到密钥,将不会引发异常。显然,如果你编写了一个自定义的
ILookup
,你可以让它以任何你喜欢的方式运行。你是对的,这取决于实现。但是,我检查了John Skeets的[eduLINQ版本的ILookup实现](它也返回
null
,而不是抛出异常,因此我认为它是处理不存在的键的理想版本。
var status = someList["Football"].Any(y => y == "Venus Williams");
var status = someList.Any(grp => grp.Key.Equals("Football") && grp.Contains("Venus Williams"));