我想用一个LINQ语句将列表拆分为两个列表.我现在正在这样做:
var listA = allItems.Where(item => item.IsUseful);
var listB = allItems.Except(listA);
Run Code Online (Sandbox Code Playgroud)
但是我想在查询语法中使用单个LINQ语句,它只在原始列表上迭代一次,并返回一个匿名类型,其中两个列表作为属性(例如results.ListA; results.ListB).
这会给你一个Dictionary<bool, List<T>>带有两个列表,你可以轻松地得到您的列表result[true]和result[false]:
var result = allItems.GroupBy(item => item.IsUseful)
.ToDictionary(x => x.Key,x => x.ToList());
Run Code Online (Sandbox Code Playgroud)
我不知道有什么方法可以通过“Results.ListA”和“Result.ListB”等命名属性来访问它,而不使用反射,这会花费更多的成本,但这将使您通过位置访问非常接近:
var results = allItems.GroupBy(item => item.IsUseful).ToList();
results.First(); // this will access listA
results.Last(); // this will access listB
Run Code Online (Sandbox Code Playgroud)
或者在查询语法中,正如您在问题中所述:
var results = (from x in allItems
group x by x.IsUseful
into groupings
select groupings).ToList();
results.First(); // this will access listA
results.Last(); // this will access listB
Run Code Online (Sandbox Code Playgroud)