Информация об изменениях

Сообщение Один запрос для разных полей от 20.12.2023 14:52

Изменено 21.12.2023 0:08 IT

Один запрос для разных полей
Есть такой код.
Для упрощения в классе 3 поля.
Суть в том что один запрос идет в foreach просто по разным полям.
Как можно схлопнуть это чтобы был один foreach?





  программа
using System.Linq.Expressions;

namespace helloworld
{
    class hello
    {
        static void Main()
        {
            var p1 = new Person() { Age = 3, Name = "vova" };
            var p2 = new Person() { Age = 3, Name = "vova2" };
            var p3 = new Person() { Age = 32, Name = "vova2" };
            var p4 = new Person() { Age = 33, Name = "vova2" };
            var p14 = new Person() { Age = 323, Name = "vova24" };

            var list = new List<Person>() { p1, p2, p3, p4, p14 };

            foreach (var p in list
                         .GroupBy(a => a.Id)
                         .Where(x => x.Select(a => a.Age)
                                 .Distinct()
                                 .Count() > 1
                         )
                         .SelectMany(s => s.Select(o => o)))
            {
                //log error by Age
            }
            
            foreach (var p in list
                         .GroupBy(a => a.Id)
                         .Where(x => x.Select(a => a.Name)
                                 .Distinct()
                                 .Count() > 1
                         )
                         .SelectMany(s => s.Select(o => o)))
            {
                //log error by Name
            }
        }

        class Person
        {
            public int Id;
            public string Name { get; set; }
            public int Age { get; set; }
        }
    }
}
Один запрос для разных полей
Есть такой код.
Для упрощения в классе 3 поля.
Суть в том что один запрос идет в foreach просто по разным полям.
Как можно схлопнуть это чтобы был один foreach?

using System.Linq.Expressions;

namespace helloworld
{
    class hello
    {
        static void Main()
        {
            var p1 = new Person() { Age = 3, Name = "vova" };
            var p2 = new Person() { Age = 3, Name = "vova2" };
            var p3 = new Person() { Age = 32, Name = "vova2" };
            var p4 = new Person() { Age = 33, Name = "vova2" };
            var p14 = new Person() { Age = 323, Name = "vova24" };

            var list = new List<Person>() { p1, p2, p3, p4, p14 };

            foreach (var p in list
                         .GroupBy(a => a.Id)
                         .Where(x => x.Select(a => a.Age)
                                 .Distinct()
                                 .Count() > 1
                         )
                         .SelectMany(s => s.Select(o => o)))
            {
                //log error by Age
            }
            
            foreach (var p in list
                         .GroupBy(a => a.Id)
                         .Where(x => x.Select(a => a.Name)
                                 .Distinct()
                                 .Count() > 1
                         )
                         .SelectMany(s => s.Select(o => o)))
            {
                //log error by Name
            }
        }

        class Person
        {
            public int Id;
            public string Name { get; set; }
            public int Age { get; set; }
        }
    }
}