Как группировать в Entity Framework Core без повторяющихся групп? - PullRequest
0 голосов
/ 11 октября 2018

Я хочу выполнить группировку в ядре Entity Framework без повторяющихся групп.

Предположим, у меня есть два столбца

Column A     Column B
1            1
2            1
2            1
4            5
5            4

Если группировка выполняется для двух столбцов EntityЯдро фреймворка: результат довольно очевиден.

Column A     Column B
1            1
2            1
4            5
5            4

Но я хочу создать группу, которая будет работать в обоих направлениях: A-> B и B-> A, поэтому результат будет

Column A     Column B
1            1
2            1
5            4

Есть идеи, как это сделать в Entity Framework Core?

Первоначально я пытался использовать Union

 var user = _context.Transactions
        .Where(p => !p.IsDeleted && (p.ReceiverUserId == userId) &&
                    (p.SenderUserId != null))
        .Include(p => p.SenderUser)
        .GroupBy(p => p.SenderUserId)
        .Select(p => new TempModel { Id = p.FirstOrDefault().SenderUser.Id, User = p.FirstOrDefault().SenderUser, CreatedDate = p.FirstOrDefault().CreatedDate });

    var user2 = _context.Transactions
        .Where(p => !p.IsDeleted && (p.SenderUserId == userId) &&
                    (p.ReceiverUserId != null))
        .Include(p => p.ReceiverUser)
        .GroupBy(p => p.ReceiverUserId)
        .Select(p => new TempModel { Id = p.FirstOrDefault().ReceiverUser.Id, User = p.FirstOrDefault().ReceiverUser, CreatedDate = p.FirstOrDefault().CreatedDate});

    var finalQuery = user.Union(user2);
    var finalQuery2 = finalQuery.GroupBy(p => p.Id);
    var finalQuery1 = finalQuery2.OrderByDescending(p => p.FirstOrDefault().CreatedDate);


finalQuery.GroupBy(p => p.Id); <- this line gives error

1 Ответ

0 голосов
/ 17 октября 2018

Вы должны отсортировать эти столбцы по убыванию: 4-5 => 5-4; 5-4 => 5-4; 5-5 => 5-5, а затем group by или distinc по ним:

var answer = db.Table.Select(x => new 
{                 
    ColumnA = x.ColumnA > x.ColumnB ? x.ColumnA : x.ColumnB,
    ColumnB = x.ColumnA > x.ColumnB ? x.ColumnB : x.ColumnA
}).Distinct().ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...