标题类型说明了一切。我似乎无法找到DictionaryOrDefault
\ ListOrDefault
\ CollectionOrDefault
选项。
有这样的方法吗?如果不是我该怎么做:
MyClass myObject = MyDictionary
.SingleOrDefault(x =>
{
if (x.Value != null)
return (x.Value.Id == sourceField.SrcField.Id);
else
return false;
}).Key;
如果有多个匹配? (我得到了一个execption,因为SingleOrDefault仅用于单个结果(想象一下!)。)
猜猜我需要更清楚(虽然where
答案看起来不错)。
我有上述声明。我改变了我的程序,使它不总是返回1(可能有几个值匹配一个键)。这失败了所以我正在寻找一个要返回的集合(而不仅仅是一个项目)。
答案 0 :(得分:4)
如果您打算返回与谓词匹配的第一个,则可以使用IEnumerable<T>.FirstOrDefault(Func<T, bool> predicate)
。
否则,您只需查看IEnumerable<T>.Where(Func<T, bool> predicate)
linq扩展,它将返回与传递的谓词匹配的所有元素。如果没有元素与谓词匹配,那将返回一个空IEnumerable<T>
,此时如果你真的需要该值为null,你可以看看是否有任何内容。
var res = MyDictionary.Where(x =>
{
if (x.Value != null)
return (x.Value.Id == sourceField.SrcField.Id);
return false;
});
if (!res.Any())
res = null;
然后,如果你绝对需要将它作为一个列表,你可以调用
res.ToList();
请注意,如果您实际操纵Dictionary<TKey, TValue>
,res
将包含KeyValuePair<TKey, TValue>
。
答案 1 :(得分:1)
如果您执行类似
的操作var mylist = obj.Where(x=>x.attr1 == 4);
然后,您可以使用.Any()方法检查是否返回了任何内容
mylist.Any()