C# 对象集合内的筛选集合不起作用
我正在尝试使用LINQ Any运算符筛选列表内部的子列表,该问题是,尽管在许多站点中这是一个针对此类问题的批准答案,但任何运算符都无法工作, 我有组对象列表,每个组对象都有一个车辆列表,问题是我试图使用车牌号过滤每个组内的车辆 请检查下面我为检查此问题而创建的代码C# 对象集合内的筛选集合不起作用,c#,linq,collections,C#,Linq,Collections,我正在尝试使用LINQ Any运算符筛选列表内部的子列表,该问题是,尽管在许多站点中这是一个针对此类问题的批准答案,但任何运算符都无法工作, 我有组对象列表,每个组对象都有一个车辆列表,问题是我试图使用车牌号过滤每个组内的车辆 请检查下面我为检查此问题而创建的代码 using System; using System.Linq; using System.Collections.Generic; namespace Demo { class Program { s
using System;
using System.Linq;
using System.Collections.Generic;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
Seed seed = new Seed();
seed.SeedGroupsVehicles();
List<Group> lstGrps =seed.SeedGroupsVehicles();
// Linq Query to filter Vehicles inside each group
var filtered = lstGrps
.Where(s => s.Vehicles.Any(vehicle => vehicle.PlateNo.Contains("A0-")))
.GroupBy(p=>p.Name);
List<Group> lstfilteredGroup = filtered.SelectMany(f => f).ToList();
// Print Filtered Groups
foreach(var grp in lstfilteredGroup)
{
Console.WriteLine(" Group {0} {1}" , grp.Id,grp.Name);
foreach (var vehicle in grp.Vehicles)
{
Console.WriteLine("\tVehicle {0} {1} {2}",vehicle.Id,vehicle.Name,vehicle.PlateNo);
}
}
}
}
public class Seed
{
public List<Group> SeedGroupsVehicles()
{
// Create two groups each group has ten vehicles
Group[] arrGroups = new Group[2];
string[] vehiclesPLateNums = new string[] { "A0-3456790", "A0-3440999", "A0-2354543", "A0-5345346", "LP-ZA32554", "LP-3445464", "LP-3590324", "LP-3423535", "LP-2352569", "LP-5435XCF" };
string[] vehiclesNames = new string[] { "V1", "V2", "V3", "V14", "V5", "V6", "V7", "V8", "V9", "V10" };
List<Vehicle> lstvehicles;
for (int index = 0; index < arrGroups.Length; index++)
{
lstvehicles = new List<Vehicle>();
Vehicle vehicle = new Vehicle();
for (int vehicleIndex = 0; vehicleIndex < vehiclesNames.Length; vehicleIndex++)
{
lstvehicles.Add(new Vehicle() { Id= vehicleIndex + 1 , Name=vehiclesNames[vehicleIndex],PlateNo=vehiclesPLateNums[vehicleIndex] });
}
arrGroups[index] = new Group() { Id = index+1, Name = "group " + index+1, Vehicles = lstvehicles } ;
}
return arrGroups.ToList();
}
}
}
打印每组车辆后,我注意到每组的车辆没有根据带有字符串A0的PlateNo进行过滤,
请提供帮助并致以衷心感谢当您要筛选每组车辆列表时,您正在筛选LSTGRP 在您的代码中,过滤的将是一个IEnumerable,其中每个组在其PlatNo包含A0-的车辆中至少有一辆车辆,并且由于此条件适用于所有组,因此不会过滤任何内容 请尝试以下代码:
Seed seed = new Seed();
var groups = seed.SeedGroupsVehicles();
var filteredGroups = groups
.Select(g => new Group {
Id = g.Id,
Name = g.Name,
// Here is where you filter Vehicles
Vehicles = g.Vehicles.Where(v => v.PlateNo.Contains("A0-")),
});
我不确定我是否理解这个问题。你能提供样本数据和预期结果吗?假设你去问每个人,他们在哪里有孩子,他们名字的一部分是Matt Any,并且包含。萨莉有两个孩子——马修和凯西。她符合标准。如果你问她孩子的名字,她会怎么回答?你如何解决你的问题?