C# LINQ对列表同一属性校验多条件返回false问题排查
问题原因
你当前的判断条件o.name.Equals("AAA") && o.name.Equals("BBB")是要求单条记录的name字段同时等于两个不同的字符串,这一逻辑本身不可能成立,所以_check永远返回false。
你已经按testNumber做了分组,每个分组下是同一个测试编号对应的所有记录,你实际需要判断的是「当前分组下既存在name为AAA的记录,也存在name为BBB的记录」,调整判断逻辑即可。
修正后的代码示例
static void Main(string[] args) { var _tests = new List<testDetails>() { new testDetails { testNumber = "1111111", name = "AAA" }, new testDetails { testNumber = "1111111", name = "BBB" }, new testDetails { testNumber = "1111111", name = "CCC" }, new testDetails { testNumber = "1111111", name = "DDD" }, new testDetails { testNumber = "222222", name = "AAA" }, new testDetails { testNumber = "22222", name = "BBB" }, new testDetails { testNumber = "33333", name = "CCC" }, new testDetails { testNumber = "11111", name = "EEE" }, new testDetails { testNumber = "33333", name = "CCC" }, new testDetails { testNumber = "55555", name = "DDD" } }; foreach (var testGroup in _tests.GroupBy(x => x.testNumber).ToList()) { // 判断当前分组同时存在AAA和BBB的记录 bool _check = testGroup.Any(o => o.name.Equals("AAA")) && testGroup.Any(o => o.name.Equals("BBB")); if (_check) { // 分组的Key就是对应的testNumber,无需额外查询 string targetTestNumber = testGroup.Key; // 你的后续处理逻辑 } } }
按照你的测试数据,只有testNumber = "1111111"的分组会满足判断条件。
内容的提问来源于stack exchange,提问作者DeSon
相关产品推荐
相关产品推荐

