如果我有这样的课程
public class Test
{
public string Id {get; set;}
public string Name {get; set;}
public int Value {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
然后:
List<Test> values = new List<Test>(); // this contains let's say 10 items
Run Code Online (Sandbox Code Playgroud)
我喜欢这个:
var grouped = values.Where(x=>x.Value > 10).GroupBy(x=>x.Name);
Run Code Online (Sandbox Code Playgroud)
我的问题是如何检查是否grouped == null?或者我如何检查没有符合该标准的分组?
我问,因为我喜欢这样:
if (grouped == null) // this is false although the linq yielded no results
{
}
Run Code Online (Sandbox Code Playgroud)
你可以使用方法Any():
var anyItems = grouped.Any();
Run Code Online (Sandbox Code Playgroud)
您不需要检查null,因为分组将返回空集合而不是null
您可以检查是否没有组,如下所示:
var anyGroups = grouped.Any();
Run Code Online (Sandbox Code Playgroud)
如果至少有一个组,则调用的扩展方法Any将返回true.否则它会返回false.
根据MSDN,这是该方法的签名GroupBy:
public static IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector)
Run Code Online (Sandbox Code Playgroud)
从上面可以清楚地看出,该方法返回实现IGrouping接口的一系列项.(IGrouping表示具有公共密钥的对象的集合).查找序列是否包含元素的简单方法是使用枚举的扩展方法调用Any.
此外,这是一个O(1)操作 - 使用该Any方法而不传递任何谓词.在使用枚举的扩展方法时Count,在某些情况下是一个O(n)操作.
| 归档时间: |
|
| 查看次数: |
3341 次 |
| 最近记录: |