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

Сообщение Один запрос для разных полей от 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; }
        }
    }
}