我可以使用LINQ将IEnumerable<T>拆分为两个IEnumerable<T>,并且只使用一个查询/LINQ语句吗?

我希望避免重复IEnumerable<T>次.例如,是否可以合并下面的最后两条语句,以便只遍历一次allValues?

IEnumerable<MyObj> allValues = ...
List<MyObj> trues = allValues.Where( val => val.SomeProp ).ToList();
List<MyObj> falses = allValues.Where( val => !val.SomeProp ).ToList();

推荐答案

您可以使用以下命令:

var groups = allValues.GroupBy(val => val.SomeProp);

要强制立即进行判断,如您的示例所示:

var groups = allValues.GroupBy(val => val.SomeProp)
                      .ToDictionary(g => g.Key, g => g.ToList());
List<MyObj> trues = groups[true];
List<MyObj> falses = groups[false];

.net相关问答推荐

Erlang 的让它崩溃的哲学 - 适用于其他地方吗?

标签从右向左增长

如何在 MSBuild 脚本中获取当前目录?

如何从标头中检索基本身份验证凭据?

设置日志(log)文件名以在 Log4j 中包含当前日期

如何解决请确保文件可访问并且它是有效的程序集或 COM 组件?

什么决定了 Path.GetTempPath() 的返回值?

如何创建只读依赖属性?

属性应该与其类型同名吗?

使用 .NET 中的代码更改桌面墙纸

C# 属性实际上是方法吗?

C# 编译为 32/64 位,或任何 cpu?

有没有办法只在 C# 中设置一次属性

哪个更快:清除集合或实例化新的

获取 .NET 程序集的 AssemblyInformationalVersion 值?

如何确定字符串是 C# 中的有效 IPv4 还是 IPv6 地址?

如何在 WebBrowser 控件中注入 Javascript?

ToLowerInvariant() 有什么问题?

绑定在代码隐藏中定义的对象

如何判断uri字符串是否有效